我已经阅读了akka文档,但无法理解在使用akka时线程交互的清晰性。文档可能会忽略这一点,认为这是显而易见的,但对我来说并不是那么明显。
所有的akka actor似乎都在它们被调用的同一个线程中运行。我将actor视为协作过程,每次接收调用时都有自己的堆栈重置。
您可以执行一长串沿直线切换的actor链。每个接收操作执行小型非阻塞操作,并强制另一个接收操作继续工作。没有事件循环,可以处理actor系统外的消息。
我想捕获来自其他线程的请求,执行控制操作,并等待另一个消息。
以下是一些概述我的需求的用例。
有一个线程不断从某些源轮询数据。一旦数据匹配模式,它就会基于actor调用事件驱动处理程序。逻辑控制器做出决策并将其传递给工作者。应该有两个持久线程。一个线程在轮询上不断工作,另一个线程异步地控制它的工作。不能让akka actors进入第一个线程,因为它们会破坏轮询周期,第一个线程也不应阻塞actors,因此需要另一个线程。
有一种双面棋盘游戏。一侧有一个控制器线程,它安排计算时间工作与棋盘服务器交互等等。另一个线程是一个重型计算线程,循环遍历不同的变体,无法写入akka,因为它具有阻塞性质。
我知道现有的akka futures,但它们代表一次触发后运行并在执行目标后关闭的工作任务。Futures与akka actors结合得很好,但不能表示循环工作线程。
Akka actor系统包含不同类型的网络事件循环。您可以使用其内置的远程actor系统或众所周知的0mq协议。但对于线程交互使用网络似乎过度了。
粘合非akka线程和akka线程的预期方法是什么?我应该编写一些特殊的程序以线程安全的方式执行消息传递吗?
ActorRef.tell()
)。 - Roland Kuhn