我读了一本书中的一章(Bruce A. Tate的七周七种语言)关于Matz(Ruby的发明者)说'我会删除线程并添加actor,或者其他一些更高级的并发功能'。
答案 0 :(得分:15)
演员模型不会取代线程;在cpu级别,进程仍将具有多个线程,这些线程在处理器核心上进行调度和运行。演员的想法是用一个模型取代这个潜在的复杂性,它的支持者认为,这使得程序员更容易编写可靠的代码。
参与者的想法是拥有单独的控制线程(Erlang用语中的过程),它们只通过消息传递进行通信。更传统的编程模型是共享内存,并使用互斥锁协调线程之间的通信。这仍然发生在actor模型的表面下,但细节被抽象掉了,程序员根据消息传递给出了可靠的原语。
一个重点是演员不一定将1-1映射到线程 - 在Erlang的情况下,他们肯定不会 - 每个内核线程通常会有很多Erlang进程。因此必须有一个调度程序将actor分配给线程,这个细节也从应用程序程序员中抽象出来。
如果您对演员模型感兴趣,可能需要查看它在Erlang或Scala中的工作方式。
如果您对其他类型的新并发热点感兴趣,您可能需要查看software transactional memory,这是一种可以在clojure和haskell中找到的不同方法。
值得一提的是,许多更积极的创建高级并发模型的尝试似乎都发生在函数式语言中。可能由于这种信念(我自己喝了一些kool-aid),不变性使得并发性变得更加容易。
答案 1 :(得分:3)
我把这个问题作为我的最爱,我正在等待答案,但既然还没有,那么这就是我的......
演员模型为什么以及如何成为一个 高级并发模型 替换线程?
演员可以摆脱可变的共享状态,这很难正确编码。 (我的理解是)actors
基本上可以认为是具有自己的线程的对象。您将在actor中的线程排队和使用的actor之间发送消息。因此,演员中的任何状态都被封装,并且不会被共享。所以很容易编码正确。
另见http://www.slideshare.net/jboner/state-youre-doing-it-wrong-javaone-2009
其他哪些型号是'先进的 并发模型'?
请参阅http://www.slideshare.net/jboner/state-youre-doing-it-wrong-javaone-2009
答案 2 :(得分:2)
参见数据流编程。这是一种方法,它是通常的OOP设计之上的一层。换句话说:
编程正在进行3层:
维基百科文章是了解业务的良好起点:http://en.wikipedia.org/wiki/Flow-based_programming 另请参阅“actor model”,“dataflow programming”等。
答案 3 :(得分:1)
请提供以下文件
答案 4 :(得分:1)