我可以安排任务运行少于每10毫秒

use*_*074 3 scala akka

我注意到Akka中的scheduler.schedule不适用于小于10ms的调度.例如,我在下面尝试过,我每隔10ms只收到一条消息.是否有可能减少这种情况,即增加频率?

谢谢Des

akka.actor.ActorSystem("Test").actorOf(Props(new akka.actor.Actor {

    val system = context.system
    import system.dispatcher

    system.scheduler.schedule(0 milliseconds, 2 milliseconds, self, "Test")

    def receive = {

        case msg => 
            println("Received[" + System.currentTimeMillis + "]: " + msg)
    }
}), "Test")
Run Code Online (Sandbox Code Playgroud)

Kon*_*ski 6

调度程序没有针对非常精确的调度进行优化,而是针对大量定时器的低开销调度进行了优化(例如," - 系统中的每个Actor都希望有一个调度事件").当你安排某些事情时,它会与"时段"中的其他任务一起放入"存储桶"中,并且将比给定的超时更快地执行.

正如您所注意到的,默认存储桶分辨率为10毫秒.您可以通过调整此设置akka.scheduler.tick-duration,但请注意,确切依赖它可能不是最好的主意(系统特定的等待,垃圾收集等等).

您可以在此akka用户线程中阅读有关此内容的更多详细信息:使用调度程序与截止日期模拟某些后端