2016-08-19 88 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