gpt4 book ai didi

multithreading - 与线程相比,Actor 的工作原理如何?

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

与线程相比,对于Actors如何工作有什么好的和简短的解释吗?

一个线程不能被视为一个参与者并向其他线程发送消息吗?我看到了一些差异,但对我来说并不是那么清楚。我可以通过不同的方式使用线程来在任何语言中使用Actor吗?

最佳答案

参与者模型基于消息传递进行操作。允许各个进程(参与者)彼此异步发送消息。这与我们通常认为的线程模型的区别在于(至少在理论上)没有共享状态。如果人们相信(我认为这是合理的)共享状态是万恶之源,那么 Actor 模型就会变得非常有吸引力。

但是,我们不应该过度兴奋。 Actor 模型并没有(与某些指控相反)使僵局成为不可能。参与者模型也不会阻止您在不同进程(例如消息队列)之间争夺资源。该模型只有在一定级别以上才“无锁”。在较低级别,为了协调消息队列,仍然需要锁定。

线程不能被视为参与者并向其他线程发送消息吗?

嗯,是的,也不是。不,如果您只是使用在共享内存位置周围放置互斥体的方法。然后线程共享这个状态——它们都可以访问这个内存,都可以读取它,重写它,等等。但是你可以在线程模型之上构建一个actor模型,实际上所有actor实现都有线程下。我通过为每个线程提供一个由互斥锁保护的队列来将类似的东西(非常糟糕)组合在一起——只是为了好玩。要了解如何管理参与者线程阻抗,请参阅 my question from a year ago .

我可以通过不同方式使用线程来在任何语言中使用 Actor 模型吗?

是的,但是需要更多的工作。您最喜欢的语言很可能有一个消息传递库,因此这将是首先要研究的事情。另外,您应该研究不可变数据结构的使用。请注意,如果数据结构是不可变的,那么您基本上已经处理了“共享状态”问题——多个线程可以保存对不可变数据的引用,而不会发生任何不良情况。 Actor 语言往往也是函数式语言(erlang、scala)是有原因的。

您可能还想看看软件事务内存,这是一个不同但也引人注目的模型。 Clojure 是我最喜欢的例子。

关于multithreading - 与线程相比,Actor 的工作原理如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3583137/

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