2016-08-19 84 views
1

我要研究Akka Scheduler。根據我的假設,調度程序在另一個線程的特定時間內運行計劃任務。根據documentation,他們在調度程序中使用Runnable對象。這個不清楚,爲什麼他們使用Runnable對象而沒有調用start()就可以運行,新的線程棧不能生成。或者Scheduler不會爲運行計劃任務創建分隔線程?Akka調度程序:akka調度程序如何工作?

akka調度程序如何工作?

回答

0

上有Runnable沒有start()。您正在混合ThreadRunnable。 在引擎蓋下,Scheduler使用Dispatcher,可以將其作爲一個ThreadPool頂部的阿卡圖層進行簡化。爲了執行你的任務,akka會將你的任務(Runnable)提交給這個池,那麼這個池將有一個他的Thread來調用任務的run()方法。

2

,當我用Akka Scheduler,我想研究源代碼,獲取更多的知識 - https://github.com/akka/akka/blob/master/akka-actor/src/main/scala/akka/actor/Scheduler.scala

正如你所看到的,Akka Scheduler使用ExecutorContect(包裝ForkJoinPool下)的隱含參數onvoke新Runnable併發送消息給其他演員通過receiver ! message通過利用fire and forget模式。

理解全貌另一個重要的類是FiniteDuration(它允許設立延遲時間),Cancellable(它允許取消預定操作的執行),他們使用的是與調度流程相關的大部分方法(例如scheduleOnce,我用它來演員之間的時間同步)

+0

它說明了情況嗎? – pacman