演员模式 - 它究竟构成了什么

tim*_*one 44 design-patterns actor

我正在做一些客观的C/iOS开发,并听过几个对Actor模式的引用.在Big Nerd Ranch的书中,它说:

当您有一个长时间运行的任务和一些需要在完成后执行的代码时,将使用一个actor对象.这种对象被赋予执行任务所需的信息以及在该任务完成时执行的回调.actor在没有任何进一步输入的情况下在自己的线程上运行,并在完成时被销毁.

这里的演员与网络电话一起使用.这是演员主要使用的方式吗?是否与代表团相互排斥或互补?Actor的定义似乎非常广泛,我试图更好地处理它的含义.此外,是否可以在非OO环境中拥有Actor?

Dan*_*sky 60

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

  • 发送和接收消息(每个actor都有一个邮箱)
  • 与其他演员共享没有可变记忆
  • 是根据运行时的奇思妙想安排的.一个actor可以被赋予自己的线程,但是更有可能是几个参与者在单个线程中参与合作多线程,或者甚至可能参与先发制人的多线程.

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

只要您需要大量(和大量)有状态的小进程,就可以使用Actor.网络是一种常见的用例,因为您不希望为每个连接分配整个线程.你想要一些更轻量级的东西,所以你为每个连接分配一个actor,然后在一个较小的线程池上安排actor.但网络肯定不是演员的唯一用途.

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

  • 在许多方面,基于演员的编程类似于OOP背后的原始理念,由Alan Kay在Smalltalk中实现:将状态隔离为完全独立的事物,这些事物具有行为并且只能通过消息传递相互影响. (22认同)