运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

scala中是否存在快速并发语法糖的实现?例如.的map-reduce

运维开发网 https://www.qedev.com 2020-06-17 16:56 出处:网络 作者:运维开发网整理
与演员传递信息非常棒.但我希望代码更简单. 示例(伪代码) val splicedList:List[List[Int]]=biglist.partition(100) val sum:Int=ActorPool.numberOfActors(5).getAllResults(splicedList,foldLeft(_+_)) spliceIntoParts将一个大列表转换为100个小列表 nu
与演员传递信息非常棒.但我希望代码更简单.

示例(伪代码)

val splicedList:List[List[Int]]=biglist.partition(100)
val sum:Int=ActorPool.numberOfActors(5).getAllResults(splicedList,foldLeft(_+_))

spliceIntoParts将一个大列表转换为100个小列表

numberofactors部分创建一个池,该池使用5个actor并在作业完成后接收新作业

和getallresults使用列表上的方法.所有这些都是在后台传递的消息完成的.也许getFirstResult,计算第一个结果,并停止所有其他线程(如破解密码)

与使用期货创建演员相比,您可以减少开销:

import scala.actors.Futures._
val nums = (1 to 1000).grouped(100).toList
val parts = nums.map(n => future { n.reduceLeft(_ + _) })
val whole = (0 /: parts)(_ + _())

您必须处理分解问题并编写“future”块并将其重新组合成最终答案,但它确实使得并行执行一堆小代码块变得容易.

(请注意,左侧的_()是未来的应用函数,这意味着“给我你并行计算的答案!”,它会阻塞,直到答案可用.)

并行集合库会自动分解问题并为您重新组合答案(与Clojure中的pmap一样);那还不是主要API的一部分.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消