gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:28:12 24 4
gpt4 key购买 nike

我已经阅读了 akka 文档,并且在使用 akka 时无法对线程交互产生清晰的理解。文档可能会忽略这件事,但对我来说并不那么明显。

所有 akka Actor 似乎都在他们被调用的同一线程中运行。我将 Actor 视为每次接收调用时都会重置自己的堆栈的协同程序。

您可以执行直线切换的巨大 Actor 链。每个接收执行小的非阻塞操作并强制另一个接收进一步工作。没有事件循环可以处理参与者系统之外的消息。

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

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

  • 有一个线程不断地从某些来源轮询数据。一旦数据匹配模式,它就会调用基于参与者的事件驱动处理程序。逻辑 Controller 做出决定并将其传递给工作人员。应该有两个持久线程。一个线程不断地进行轮询,另一个线程异步工作以控制它的工作。你不应该让 akka Actor 进入第一个线程,因为他们打破了轮询周期,并且第一个线程不应该阻塞 Actor ,所以他们需要另一个线程。
  • 有某种双面棋盘游戏。一侧有一个 Controller 线程,用于安排计算时间工作与板服务器等交互。其他线程是一个繁重的计算线程,它循环不同的变体并且不能用akka编写,因为它具有阻塞性质

  • 我知道现有的 akka future ,但它们代表了一项工作任务,一旦被触发就运行并在执行目标后关闭。 future 与 akka Actor 很好地结合,但不能表达循环的工作线程。

    Akka actor 系统包含不同类型的网络事件循环。您可以使用其内置的远程参与者系统或众所周知的 0mq 协议(protocol)。但是使用网络进行线程交互对我来说似乎有些过头了。

    将非akka线程与akka one粘合的假定方法是什么?我应该写几个特殊的程序来以线程安全的方式执行消息传递吗?

    最佳答案

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

    我发现使用带有receiveTimeout 的Actor 定期进行非阻塞轮询更有用,当有东西被轮询时,它会将它发布到其他一些actor,甚至可能是它的ActorSystems 的EventStream,用于真正的发布-子 Action 。

    关于multithreading - akka actor如何在线程之间进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541507/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com