关于如何通过一个简单的示例显示 scala 的多处理器功能的建议



所以我已经完成了关于Scala的coursera课程,并亲自做了一个小的POC,展示了scala的多处理器功能。

正在考虑创建一个非常小的示例,其中应用程序可以启动多个任务(每个任务将执行一些与网络相关的查询等(,并且我也可以显示多个内核的用法。此外,还会有一个线程将侦听机器的特定端口,并根据它在那里接收的信息生成任务。

关于如何处理此类问题的任何建议?我现在不想使用 AKKA。

并行集合可能是在 Scala 中使用多个处理器的最少努力的方式。它自然会导致如何最好地组织代码和数据以利用并行操作,更重要的是什么不会变得更快。

作为一个更具体的问题,假设您已经读取了CSV文件(或XML文档,或其他文件(并希望解析数据。如果记录已拆分为集合(如 List[String](,则可以执行.par以创建并行列表,然后后续.map将尽可能使用所有内核。生成的List[whatever]将保留相同的顺序,即使操作未按顺序执行也是如此。考虑对每行上的值求和:

val in: List[String] = ...
val out = in.par.map { line =>
    val cols = line split ','
    cols.map(_.toInt).sum
}

因此,List("1,2,3", "4,5,6")in将导致List(6, 15) out,就像没有.par一样。 但它将跨多个内核运行。它是否更快是另一回事,因为使用并行集合会产生开销,这可能会使像这样的微不足道的示例变慢。您需要进行试验,看看并行集合在哪些方面对您的用例有利。

在 http://docs.scala-lang.org/overviews/parallel-collections/overview.html

睡眠理发师问题呢?您可以通过网络以分布式方式实现它,理发师的生成服务在一个端口上侦听,客户通过网络生成并请求理发师服务。

我认为这将是足够广泛和有趣的,但并非不可能。

然后,您可以在此基础上根据需要扩展它,例如为不同的事情(剪发或剃须(添加专门的理发师,然后从那里向下。天空(或者,更好的是,线程的上限(是极限!

最新更新