// parallel processing
int processors = Runtime.getRuntime().availableProcessors();
ExecutorService executorService = Executors.newFixedThreadPool(threads);
final List<String> albumIds2 = new ArrayList<String>();
long start2 = System.nanoTime();
for (final HColumn<String, String> column : result.get().getColumns()) {
Runnable worker = new Runnable() {
@Override
public void run() {
albumIds2.add(column.getName());
}
};
executorService.execute(worker);
}
long timeTaken2 = System.nanoTime() - start2;
tôi có mã như ví dụ trên tạo ra List<String>
của id album. cột là một lát từ cơ sở dữ liệu cassandra. tôi ghi lại thời gian thực hiện cho toàn bộ danh sách các album sẽ được tạo.Khi nào xử lý song song khắc phục xử lý tuần tự?
cùng tôi đã thực hiện bằng cách sử dụng vòng lặp nâng cao như dưới đây.
QueryResult<ColumnSlice<String, String>> result = CassandraDAO.getRowColumns(AlbumIds_CF, customerId);
long start = System.nanoTime();
for (HColumn<String, String> column : result.get().getColumns()) {
albumIds.add(column.getName());
}
long timeTaken = System.nanoTime() - start;
tôi lưu ý rằng bất kể số lượng album bao nhiêu, mỗi vòng lặp luôn mất một thời gian ngắn hơn để hoàn thành. Tôi có làm sai không? hoặc tôi cần một máy tính với nhiều lõi. Tôi thực sự mới với toàn bộ khái niệm về tính toán song song, xin hãy tha thứ cho tôi nếu câu hỏi của tôi là ngu ngốc.
"* tôi có cần một máy tính có nhiều lõi không? *" => Có. Như đã nói bên dưới, hãy thử nhóm các cột của bạn theo lô có ít nhất 100 hoặc nhiều hơn để có hiệu suất tốt hơn. – assylias