2012-02-06 31 views
12

tôi know mà bạn có thể thiết lập số lượng các chủ đề để sử dụng cho tất cả các hoạt động .par như vậy: collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)Làm thế nào để thiết lập số lượng bài để sử dụng cho mệnh

Nhưng là nó có thể thiết lập số lượng bài để chỉ sử dụng cho một cuộc gọi .par?

+1

Tôi cho rằng bạn có thể tạo một hồ bơi riêng cho điều đó, nhưng tôi không nghĩ rằng nó được hỗ trợ tại thời điểm này. –

+4

Điều này không hoạt động trong 2,10 nữa. –

+0

bản sao có thể có của [mức độ song song scala song song] (http://stackoverflow.com/questions/5424496/scala-parallel-collections-degree-of-allelism) –

Trả lời

15

Bạn có thể tạo một khối lập mức độ xử lý song song và sau đó thực hiện các phương pháp cụ thể trong khối rằng:

def withParallelism[A](n : Int)(block : => A) : A = { 
    import collection.parallel.ForkJoinTasks.defaultForkJoinPool._ 
    val defaultParLevel = getParallelism 
    setParallelism(n) 
    val ret = block 
    setParallelism(defaultParLevel) 
    ret 
} 

Và sau đó gọi nó như vậy:

withParallelism(2) { 
    (1 to 100).par.map(_ * 2) 
} 
+11

có vẻ như nó thay đổi một số trạng thái toàn cầu ... – tuxSlayer

+0

I không thích thực tế là nó thay đổi trạng thái toàn cầu –

13

Trong Scala 2.11 bạn nên sử dụng hỗ trợ tác vụ song song, như sau:

parallelCollection.tasksupport = new ForkJoinTaskSupport(
    new scala.concurrent.forkjoin.ForkJoinPool(parlevel)) 

parallelCollection.map(...) 

Xem công việc hỗ trợ documentation

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