我正在尝试使用Scala和Akka进行一些并行编程,我是新手.我有一个非常简单的Monte Carlo Pi应用程序(近似于一个圆圈中的pi),我用几种语言构建了它.然而,我在Akka中构建的版本的性能令我感到困惑.
我有一个用纯Scala编写的顺序版本,大约需要400ms才能完成.
与1名工人演员相比,Akka版本需要大约300-350ms,但是当我增加演员的数量时,时间会急剧增加.有4名演员,时间可以在500毫秒之间,一直到1200毫秒或更高.
迭代次数在工作者之间进行划分,所以理想情况下,性能越多越好,目前情况会越来越差.
我的代码是
object MCpi{
//Declare initial values
val numWorkers = 2
val numIterations = 10000000
//Declare messages that will be sent to actors
sealed trait PiMessage
case object Calculate extends PiMessage
case class Work(iterations: Int) extends PiMessage
case class Result(value: Int) extends PiMessage
case class PiApprox(pi: Double, duration: Double)
//Main method
def main(args: Array[String]): Unit = {
val system = ActorSystem("MCpi_System") //Create Akka system
val master = system.actorOf(Props(new MCpi_Master(numWorkers, numIterations))) //Create Master Actor
println("Starting Master") …Run Code Online (Sandbox Code Playgroud)