Vì vậy, scala 2.9 gần đây được bật lên trong thử nghiệm Debian, đưa các bộ sưu tập song song mới lạ với nó.Đối phó với sự thiếu hụt đáng ngạc nhiên của ParList trong scala.collections.parallel
Giả sử tôi có một số mã tương đương với
def expensiveFunction(x:Int):Int = {...}
def process(s:List[Int]):List[Int} = s.map(expensiveFunction)
bây giờ từ các bit teeny tôi đã lượm lặt về bộ sưu tập song song trước khi các tài liệu thực sự bật lên trên máy tính của tôi, tôi đã mong parallelize này chỉ bằng cách chuyển Liệt kê một số ParList
... nhưng với sự ngạc nhiên của tôi, không có một! (Chỉ cần ParVector
, ParMap
, ParSet
...).
Là một workround, đây (hoặc một dòng tương đương) dường như làm việc tốt đủ:
def process(s:List[Int]):List[Int} = {
val ps=scala.collection.parallel.immutable.ParVector()++s
val pr=ps.map(expensiveFunction)
List()++pr
}
năng suất một sự cải tiến hiệu suất x3 xấp xỉ trong mã thử nghiệm của tôi và đạt được sử dụng CPU ồ ạt cao (lõi tứ cộng siêu phân luồng i7). Nhưng nó có vẻ hơi vụng về.
Câu hỏi của tôi là một loại của một tổng hợp:
- Tại sao không phải là có một
ParList
? - Do không có
ParList
, có một mẫu tốt hơn/thành ngữ mà tôi nên áp dụng để Tôi không cảm thấy như chúng bị thiếu? - Tôi chỉ là "đằng sau những lần" sử dụng Danh sách rất nhiều trong các chương trình scala tôi (giống như tất cả những cuốn sách Scala tôi mua lại trong 2,7 ngày đã dạy cho tôi) và Tôi thực sự nên được tận dụng nhiều hơn của
Vectors
? (Tôi có nghĩa là trong C + + đất Tôi thường cần một lý do khá tốt để sử dụngstd::list
trênstd::vector
).