Scala Future 多核 - 性能低下

钱德拉斯卡
    import java.util.concurrent.{Executors, TimeUnit}

    import scala.annotation.tailrec
    import scala.concurrent.{Await, ExecutionContext, Future}
    import scala.util.{Failure, Success}

    object Fact extends App {
      def time[R](block: => R): Long = {
        val t0 = System.nanoTime()
        val result = block // call-by-name
        val t1 = System.nanoTime()

        val t: Long = TimeUnit.SECONDS.convert((t1 - t0), TimeUnit.NANOSECONDS)
        //println(
        // "Time taken seconds: " + t)
        t
      }
      def factorial(n: BigInt): BigInt = {
        @tailrec
        def process(n: BigInt, acc: BigInt): BigInt = {
          //println(acc)
          if (n <= 0) acc
          else process(n - 1, n * acc)
        }

        process(n, 1)
      }

      implicit val ec =
        ExecutionContext.fromExecutor(Executors.newFixedThreadPool(2))
      val f1: Future[Stream[Long]] =
        Future.sequence(
          (1 to 50).toStream.map(x => Future { time(factorial(100000)) }))

      f1.onComplete {
        case Success(s) => {
          println("Success : " + s.foldLeft(0L)(_ + _) + " seconds!")

        }
        case Failure(f) => println("Fails " + f)
      }

      import scala.concurrent.duration._

      Await.ready(Future { 10 }, 10000 minutes)

    }

我有上面的 Factorial 代码,需要使用多个内核来更快地完成程序,并且应该使用更多的内核。

所以我改变,

  • Executors.newFixedThreadPool(1) 使用 1 个内核

  • Executors.newFixedThreadPool(2) 使用 2 个内核

当更改为1 个核心时,结果会在127 秒内出现但是当更改为2 个内核时,我得到157 秒

我的疑问是,当我增加内核(并行性)时,它应该会提供良好的性能。但事实并非如此。为什么?

如果我错了或遗漏了什么,请纠正我。

提前致谢。

迪马

你是如何测量时间的?您打印出的结果不是执行所花费的时间,而是每个单独调用的时间总和。

Fact.time(Fact.main(Array.empty))在 REPL 中运行我分别得到 90 和 178 两个线程和一个线程。好像有点道理……

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算多核架构的性能?

来自分类Dev

计算多核架构的性能?

来自分类Dev

多核性能如何与Scala中的执行上下文和线程池相关

来自分类Dev

多核CPU上的Redis性能

来自分类Dev

多核CPU上的Redis性能

来自分类Dev

while循环性能单核与多核机器

来自分类Dev

AWS计算优化实例低多核性能

来自分类Dev

VmWare SQL Server Integration Services 多核性能?

来自分类Dev

qemu,arch linux和Windows 10的多核性能不佳

来自分类Dev

Is Future in Scala a monad?

来自分类Dev

Understanding Future in Scala

来自分类Dev

使用Option()的Scala Future

来自分类Dev

将Scala Future转换为Java Future

来自分类Dev

将Scala Future转换为Twitter Future

来自分类Dev

将Java Future转换为Scala Future

来自分类Dev

从异常中恢复,scala Future

来自分类Dev

Scala Future不能期待吗?

来自分类Dev

Scala中的Future是单子吗?

来自分类Dev

在Kotlin实施onComplete Scala Future

来自分类Dev

在Scala中修改Future [JsArray]

来自分类Dev

从 Scala Future 返回值

来自分类Dev

Scala Future不打印结果

来自分类Dev

多核ZeroMQ?

来自分类Dev

多核ZeroMQ?

来自分类Dev

Scala类型不匹配找到Future [A]预期Future [B]

来自分类Dev

Scala从Future [Seq [T]]提取值到Future [T]

来自分类Dev

Scala 将 Future[IOResult] 映射到 Future[Unit]

来自分类Dev

JavaFX PixelWriter性能低下

来自分类Dev

JavaFX PixelWriter性能低下