2017-09-11 15 views
-1

私はAkkaディスパッチャとグローバル実行コンテキストの基本的な違いを知っています。Akka実行コンテキストと将来のグローバルコンテキスト

I)はscala.concurrent.ExecutionContext.Implicits.global

import scala.concurrent.ExecutionContext.Implicits.global 
    val resultF = (0 to 100).map(
    x => 
     Future { 
     val startTime = System.currentTimeMillis() 
     val task = Future { 
      Thread.sleep(100) 
      x 
     } 
     task.onSuccess { 
      case result => 
      val timeRemaining = System.currentTimeMillis() - startTime 
      println(s"$result $timeRemaining") 
     } 
    } 
) 
    StdIn.readLine() 

と平均のThread.sleepに等しい時間(上の上記のコードプリントをこのコードを試み、平均103ミリ秒の周り。

しかし、次のコードでは、100-400ミリ秒の時間が表示されます。

val system = ActorSystem("test") 
    implicit val executionContext = system.dispatcher 
    val resultF = (0 to 100).map(
    x => 
     Future { 
     val startTime = System.currentTimeMillis() 
     val task = Future { 
      Thread.sleep(100) 
      x 
     } 
     task.onSuccess { 
      case result => 
      val timeRemaining = System.currentTimeMillis() - startTime 
      println(s"$result $timeRemaining") 
     } 
    } 
) 
    StdIn.readLine() 

私は離れて使用thread-poolの大きな違いだかを理解するために失敗しています。

+1

W/oもっと正確な質問... http://doc.akka.io/docs/akka/2.5/scala/dispatchers.html – cchantep

+0

@cchantep私はディスパッチャをよく知っていますが、私はそうではありません上記2つのコードスニペットに大きな違いがある理由を確かめてください。 – Atiq

答えて

0

私は、使用されているスレッドプール以外の主な違いは何か分かりません。

唯一の違いは、使用するスレッドプールとその作業スケジューリングアルゴリズムです。 http://doc.akka.io/docs/akka/2.5/scala/dispatchers.html

「グローバル」デフォルトのExecutionContextに記載されるように

アッカActorSystemのスレッドプールは、ワークスチールスレッドプールフォークジョインエグゼキュータである、例えば参照https://github.com/scala/scala/blob/v2.12.3/src/library/scala/concurrent/ExecutionContext.scala#L135

How is the fork/join framework better than a thread pool?

関連する問題