gpt4 book ai didi

design-patterns - Actor 模式——它到底是什么组成的

转载 作者:行者123 更新时间:2023-12-03 06:39:30 24 4
gpt4 key购买 nike

我正在做一些 Objective-C/iOS 开发,并且听说过一些关于 Actor 模式的引用。在《大 Nerd 牧场》一书中,它说:

An actor object is used when you have a long running task and some code that needs to be executed after it completes. This kind of object is given the information it needs to perform the task and callbacks to execute when that task is done. The actor runs on its own thread without any further input and is destroyed when it is finished.

这里的actor是与网络调用结合使用的。这就是 Actor 的主要使用方式吗?它与授权是相互排斥的还是互补的? Actor 的定义似乎非常广泛,我试图更好地理解它的含义。另外,是否可以在非 OO 环境中拥有 Actor?

最佳答案

Actor 的定义实际上似乎有点限制性。它当然不能处理 Erlang 风格的 actor(或者我相信 Scala 风格的 actor)。根据我的经验, Actor 是这样的:

  • 发送和接收消息(每个参与者都有一个邮箱)
  • 不与其他参与者共享可变内存
  • 根据运行时的突发奇想进行安排。可以为一个 Actor 提供自己的线程,但更有可能的是,多个 Actor 参与单个线程中的协作多线程,甚至可能参与抢占式多线程。

但从根本上来说,Actor 是一个自由运行的代码块,可以从其环境接收消息,也可以将消息发送回其环境。

每当您需要大量(很多)有状态的小进程时,都会使用参与者。网络是一个常见的用例,因为您不想为每个连接分配整个线程。您想要更轻量级的东西,因此您为每个连接分配一个参与者,然后将参与者安排在较小的线程池上。但网络当然不是 Actor 的唯一用途。

在 Erlang 中,参与者是一个函数。该函数可能尾部调用自身(因此它基本上是一个无限循环),并且它可能有一种干净的方式来 self 终止(无限循环有一个“中断”条件)。该循环通常等待来自系统的消息,对其进行处理,然后将消息发送到系统的其余部分。 Erlang OTP 库有一些抽象,甚至不需要编写循环,因此 OTP actor 被实现为一组回调。这样一来,OTP actor 看起来很像一个对象。

关于design-patterns - Actor 模式——它到底是什么组成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675422/

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