Actor模式 – 它究竟是什么构成的

我正在做一些Objective-C / iOS开发,并且已经听到了几个对Actor模式的引用。 在大书呆子牧场书,它说:

当你有一个长时间运行的任务和一些代码需要在完成后执行的时候使用一个actor对象。 这种types的对象被赋予执行任务所需的信息,并在完成任务时执行callback。 该angular色在自己的线程上运行,没有任何进一步的input,并在完成时被销毁。

这里的演员与networking通话一起使用。 这是演员如何主要使用? 与代表团相互排斥还是互补? Actor定义看起来非常宽泛,我试图更好地处理它的含义。 另外,是否有可能在非OO环境中有Actor?

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

  • 发送和接收消息(每个演员都有一个邮箱)
  • 与其他演员共享不可变的记忆
  • 计划基于运行时的奇思妙想。 一个angular色可以被赋予自己的线程,但更有可能的是多个angular色参与合作multithreading,或者甚至参与先发制人的multithreading。

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

任何时候都可以使用Actor,你需要很多(很多)有状态的小进程。 networking是一个常见的用例,因为您不希望为每个连接分配一个完整的线程。 你想要更轻的东西,所以你分配一个演员到每个连接,然后安排演员在一个较小的线程池。 但是networking当然不是演员的唯一使用。

在Erlang中,演员是一个function。 这个函数可能会自动调用tail(所以它基本上是一个无限循环),它可能有一个干净的方法来自我终止(无限循环有一个“break”条件)。 循环通常等待来自系统的消息,对其进行处理,然后将消息发送到系统的其余部分。 Erlang的OTP库有一些抽象,甚至不需要编写循环,因此OTP参与者被实现为一组callback。 这样,一个OTP演员看起来很像一个对象。