我正在做一些客观的C / iOS开发,并听过几个对Actor模式的引用。在Big Nerd Ranch的书中,它说:
当您有一个长时间运行的任务时,会使用一个actor对象 完成后需要执行的代码。这种对象 获得执行任务和回调所需的信息 在该任务完成时执行。 actor在自己的线程上运行 没有任何进一步的输入,并在完成时被销毁。
此处的演员与网络电话一起使用。这是演员主要使用的方式吗?是否与代表团相互排斥或互补? Actor的定义似乎非常广泛,我试图更好地处理它的含义。此外,是否可以在非OO环境中拥有一个Actor?
答案 0 :(得分:60)
对Actor的定义实际上似乎有点限制。它肯定不会处理Erlang风格的演员(或者我相信Scala风格的演员)。根据我的经验,演员是:
但从根本上说,一个actor是一个自由运行的代码块,可以从其环境接收消息,并可以将消息发送回其环境。
只要您需要大量(和大量)有状态的小进程,就会使用Actor。网络是一种常见的用例,因为您不希望为每个连接分配整个线程。你想要一些更轻量级的东西,所以你为每个连接分配一个actor,然后在一个较小的线程池上安排actor。但网络肯定不是演员的唯一用途。
在Erlang中,演员是一个功能。该函数可能尾部调用自身(因此它基本上是一个无限循环),并且它可能有一种干净的自终止方式(无限循环具有“中断”条件)。循环通常等待来自系统的消息,处理它,然后将消息发送到系统的其余部分。 Erlang OTP库有一些抽象,甚至不需要编写循环,所以OTP actor被实现为一组回调。通过这种方式,OTP演员看起来很像一个对象。