akka actor如何在线程之间进行交互

ayv*_*ngo 8 multithreading akka

我读过akka文档,在使用akka时无法清楚地理解线程交互.文档可能会忽略这个事情,但对我来说并不是那么明显.

所有的akka​​演员似乎都被称为同一个线程.我将actor视为共同程序,每次收到调用时都有自己的堆栈重置.

你可以执行一系列直线切换的演员链.每个接收执行小的非阻塞操作并强制另一个接收进一步工作.没有事件循环,可以处理actor系统之外的消息.

我想从其他线程捕获请求,执行控制操作,并等待另一条消息.

有一些用例概述了我的需求.

  1. 有一些线程不断地从某些来源轮询数据.一旦数据匹配模式,它就会根据actor调用事件驱动的处理程序.逻辑控制器做出决定并将其传递给工人.应该有两个持久的线程.一个线程在轮询上不断工作,另一个线程以异步方式工作以控制它的工作.你不应该让akka actor第一个线程,因为它们打破了轮询周期,第一个线程不应该阻止actor,所以他们需要另一个线程.

  2. 有一种双面棋盘游戏.一方有一个控制器线程,用于安排计算时间与板服务器和其他工作交互.其他线程是一个繁重的计算线程,它循环不同的变体,因为它具有阻塞性,所以无法用akka编写

我知道现有的akka​​期货,但它们代表了一个工作任务,一旦被解雇并在执行目标后关闭.期货与akka演员很好地结合在一起,但无法表达循环的工作线程.

Akka actor系统包含不同类型的网络事件循环.您可以使用其内置的远程actor系统或众所周知的0mq协议.但是使用网络进行线程交互似乎对我来说太过分了.

将非akka线程与akka一起粘贴的假设方法是什么?我应该编写几个特殊的过程来以线程安全的方式执行消息传递吗?

Vik*_*ang 5

如果您需要轮询,那么轮询线程应该将轮询的任何内容转换为消息并将其发送给actor.

我发现使用带有receiveTimeout的Actor以一定间隔进行非阻塞轮询更有用,当有些东西被轮询时,它会将它发布给其他actor,或者甚至是它的ActorSystems的EventStream,用于真正的pub -sub动作.

  • 如果您告诉我实际的线程体系结构描述是什么,那么我将进行解释。 (2认同)
  • 如果我要问的是哪本书? (2认同)