关于角色模型

最近一年一直比较关心并行计算,一开始因为 python 的线程锁实在麻烦,然后又因为一直受到 k8s 的弹性伸缩影响,加上最近又看了不少函数计算的材料和相关的 POC。我之前曾经设想过,如果将程序都用函数计算的方式,同时通过 DSL 来连接这些函数,这样既可以应对访问压力,又可以处理复杂逻辑,加上弹性,费用也不会太高,达到最佳 ROI。

看到阿里云最新发布的类似 numpy 的 python 包用于并行计算来处理本来需要大内存的机器学习运算,其中提到了通过角色模型。发现这个角色模型或许可以满足前面设想的一些逻辑。

wiki 告诉我们:在计算机科学中,角色模型(英语:Actor model)是一种并发运算上的模型。“角色”是一种程序上的抽象概念,被视为并发运算的基本单元:当一个角色接收到一则消息,它可以做出一些决策、创建更多的角色、发送更多的消息、决定要如何回答接下来的消息。角色模型在1973年于Carl Hewitt、Peter Bishop及Richard Steiger的论文中提出。

支持角色模型的语言非常多,

角色模型推崇的哲学是“一切皆是角色”,这与面向对象编程的“一切皆是对象”类似,但是面向对象编程通常是顺序执行的,而角色模型是并行执行的。角色是一个运算实体,回应接受到的消息,同时并行的:

发送有限数量的消息给其他角色;
创建有限数量的新角色;
指定接受到下一个消息时的行为。
以上操作不含有顺序执行的假设,因此可以并行进行。

发送者与已经发送的消息解耦,是角色模型的根本优势。这允许进行异步通信,同时满足消息传递的控制结构。

消息接收者是通过地址区分的,有时也被称作“邮件地址”。因此角色只能和它拥有地址的角色通信。它可以通过接受到的信息获取地址,或者获取它创建的角色的地址。

角色模型的特征是,角色内部或之间进行并行计算,角色可以动态创建,角色地址包含在消息中,交互只有通过直接的异步消息通信,不限制消息到达的顺序。

几乎所有主流语言都支持角色模型,在 Python 里面保持更新的库是:

Pykka:https://github.com/jodal/pykka
Pulsar:http://quantmind.github.io/pulsar/

之后会继续研究角色模型的使用和实用性。

发表评论

电子邮件地址不会被公开。 必填项已用*标注