2013-02-22 34 views
7

Tôi đang cố gắng tăng tốc thời gian thực thi bằng cách sử dụng song song scala.Sử dụng song song scala khi lặp qua danh sách chuyển đổi java thành bất biến

Vì vậy, để chuyển đổi một ArrayList java để là một bất biến tôi sử dụng:

var imList = scala.collection.JavaConversions.asScalaBuffer(normalQLFolderList) 

và sau đó để tận dụng đa lõi khi iterating tôi sử dụng:

for (i <- imList .par) { 
} 

Tôi lợi dụng scala song song một cách chính xác? Trong trường hợp này lặp qua danh sách. Có một hit hiệu suất lớn trên asScalaBuffer không?

+2

cách Scala'ish sẽ imList.par.map (x => yourFunction (x)) – Rajesh

+0

tôi không hoàn toàn đồng ý với điều đó: không có gì sai lầm cơ bản với là 'cho' vòng trong Scala - đó là một cách khác để nói cùng một điều. Đôi khi một vòng lặp rõ ràng có thể rõ ràng hơn, đặc biệt là khi bản đồ phẳng. –

Trả lời

5

Bộ sưu tập có thể được chuyển đổi thành các đối tác song song của chúng theo thời gian không đổi bao gồm bản đồ băm có thể thay đổi và không thay đổi và bộ băm, phạm vi, vec-tơ và mảng. Đối với tất cả các loại bộ sưu tập khác, bao gồm trình bao bọc xung quanh các bộ sưu tập đến từ Java, gọi số par dẫn đến sao chép nội dung của bộ sưu tập sang định dạng phù hợp hơn để song song.

này được mô tả ở đây một cách chi tiết hơn:

http://docs.scala-lang.org/overviews/parallel-collections/conversions.html

Tuy nhiên, tùy thuộc vào độ lớn bộ sưu tập là, và làm thế nào đắt khối for là, nó có thể là hoàn toàn hợp lý để trả tiền cho chuyển đổi này. Việc xử lý nhiều hơn khối song song for thực hiện cho mỗi phần tử, chi phí chuyển đổi càng được khấu hao. Tôi có thể nói rằng nếu tính toán cho mỗi phần tử liên quan đến bất kỳ thứ gì không cần thiết (ví dụ ít nhất tạo ra các đối tượng mới) trả tiền cho chuyển đổi, nhưng ý tưởng tốt là đo sự khác biệt hiệu suất giữa phiên bản tuần tự và song song phiên bản trong đó bao gồm gọi par:

http://docs.scala-lang.org/overviews/parallel-collections/performance.html

Các vấn đề liên quan