Scala(或Java)的QtConcurrent類似物是什麼?即簡化了MapReduce的實現,並行映射和foldl。 謝謝Scala類似物QtConcurrent
回答
見Scala Parallel Collections視頻和紙「A Generic Parallel Collection Framework」
This states:並行集合是在current development builds,將被釋放的Scala 2.9的一部分。請參閱發行計劃here,Scala 2.9可以下載here。
您只需使用scala.actors.Futures
和正常的map
/flatMap
即可。然而,沒有容易並行的fold
。
如果你去多主機,我會使用Akka's發送和接收未來。
您可以使用Scala Parallel Collections。他們目前是Scala每晚發佈的一部分,並將在Scala 2.9中發佈。這個想法是,大多數常規集合中可用的操作都是並行化的,因此並行集合可以以相同的方式使用。
目前,有幾種可用的集合類型 - 並行範圍,並行數組和並行散列嘗試。例如,您可以將並行陣列像這樣的調用並行map
和fold
操作:
scala> val pa = (0 until 10000).toArray.par
pa: scala.collection.parallel.mutable.ParArray[Int] = ParArray(0, 1, 2, 3, 4, 5, 6,...
scala> pa.map(_ + 1)
res0: scala.collection.parallel.mutable.ParArray[Int] = ParArray(1, 2, 3, 4, 5, 6, 7,...
scala> pa map { v => if (v % 2 == 0) v else -v }
res1: scala.collection.parallel.mutable.ParArray[Int] = ParArray(0, -1, 2, -3, 4, -5,...
scala> pa.fold(0) { _ + _ }
res2: Int = 49995000
還有其他並行採集操作可用。請注意,fold
必須採用關聯運算符 - 在上例中,加法是關聯的((A + B)+ C == A +(B + C)),即您可以按任意順序添加數字子序列,並且您將始終獲得相同的總和(reduce
有類似的合同)。
要注意的另一件事是傳遞給並行集合的閉包是同時調用的。如果它們有副作用,例如修改環境中的局部變量,則這些訪問必須進行同步。舉例來說,你可以做這樣的事情:
scala> var a = 0
a: Int = 0
scala> pa foreach { a += _ }
scala> a
res1: Int = 49995000
scala> a = 0
a: Int = 0
scala> pa foreach { a += _ }
scala> a
res7: Int = 49990086
,每次有不同的結果,因爲foreach
並行調用{ a += _ }
。在上面的例子中,a
應該是同步的,用鎖或原子保護。
但這個想法是使用內置的組合器來完成一項任務,並傾向於功能性編程,避免了上述示例中的局部副作用。
您可能想要在其他答案中提供的鏈接中更多地瞭解其內部機制。
非常不錯的響應與「微調」遠離突變;-) – 2010-12-13 06:48:46
- 1. 類似物體
- 2. 的CoffeeScript || =類似物?
- 3. Spring bundlor類似物
- 4. 與SqlSoup for Scala類似嗎?
- 5. 集團類似物品
- 6. Chrome應用。 jQuery.Templates類似物
- 7. 的Excel和類似物品
- 8. 使用QMutexLocker使用QtConcurrent與QtConcurrent
- 9. Scala/java是否有類似Python的StringIO?
- 10. Java/Scala中的類似Scipy的功能?
- 11. 與Linqpad類似的Scala工具
- 12. Scala類似於SQL的支持,如LINQ
- 13. 是否有類似rubygems.org的scala庫
- 14. 類似於Java中的Scala宏
- 15. QtConcurrent Map不能使用類方法
- 16. QtConcurrent blockingMappedReduced error
- 17. QtConcurrent blockingMappedReduced v.s MappedReduced
- 18. QTConcurrent不編譯
- 19. Burali-Forti悖論的Coq類似物?
- 20. Aurelia中的類似物$ apply或$ digest(Angular)
- 21. Chrome中是否有globalStorage的類似物?
- 22. 回聲web框架及其類似物
- 23. 讀取2個類似物銷對PIC
- 24. Grails是否有`ant -s`類似物?
- 25. Django:與eBay類似的購物網站
- 26. 類似搜索物理單位
- 27. C++內聯閉合類似物
- 28. Java中是否有RedBeanPHP ORM類似物?
- 29. Java中是否存在std :: bitset等價物(或類似物)?
- 30. QtConcurrent給出錯誤
另請參閱http://stackoverflow.com/questions/1751953/concurrent-map-foreach-in-scala/1753224#1753224 – oluies 2010-09-22 20:01:53