我注意到,自從Scala 2.9。*以來,setMaximumPoolSize
方法似乎從ForkJoinPool
消失了,它看起來像是我想要的。大多數關於限制Scala平行集合中並行性的討論圍繞着同一個類的setParallelism
方法(它也消失了,但對我來說不是那麼嚴重),但在我的情況下,並行任務可以執行外部IO,並且經常會阻止它。 ForkJoinPool
然後在這種情況下啓動更多的線程,並有效地執行鍼對有問題的共享IO資源的DOS,這是不可取的。Replacement for setMaximumPoolSize on ForkJoinPool
有沒有辦法以某種方式限制池中的線程數?我並不在乎IO產生的行爲,但我想要一定程度的並行性,因爲我的IO任務是獨立的,不會互相干擾。
Java8之前有什麼可做的嗎?據我瞭解,Scala的'ForkJoinPool'是java代碼的副本,可以避免依賴於更新的JRE而不願意依賴它,但是我不認爲當前的Scala版本有你提到的那些延續線程。我的目標是避免獲得數千個併發IO線程,並且我並不介意我如何到達那裏。 – 2013-03-12 13:50:24
不是我所知道的。目前的Scala版本基於舊版本的jsr166代碼。該版本使用「延續線程」,這就是爲什麼你得到所有這些額外的線程。問題總是歸結爲「當線程需要發出wait()時如何釋放線程」唯一正確的答案是框架無法執行的上下文切換。 – edharned 2013-03-12 14:19:05
噓! :(噢,謝謝澄清情況! – 2013-03-12 14:41:46