Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 要替换线程模型的参与者模型?_Ruby_Multithreading_Concurrency - Fatal编程技术网

Ruby 要替换线程模型的参与者模型?

Ruby 要替换线程模型的参与者模型?,ruby,multithreading,concurrency,Ruby,Multithreading,Concurrency,我在一本书(Bruce a.Tate写的七周七种语言)中读到了一章关于Matz(Ruby的发明者)的内容,他说“我会删除线程并添加参与者,或者其他更高级的并发特性” 参与者模型为什么以及如何成为替代线程的高级并发模型 “高级并发模型”还有哪些其他模型 我最喜欢这个问题,正在等待答案,但既然还没有答案,这是我的 演员模特为什么以及如何成为演员 高级并发模型 替换线程 参与者可以摆脱可变的共享状态,这是很难正确编码的。(我的理解是)actors基本上可以被认为是具有自己线程的对象。您在参与者之间发

我在一本书(Bruce a.Tate写的七周七种语言)中读到了一章关于Matz(Ruby的发明者)的内容,他说“我会删除线程并添加参与者,或者其他更高级的并发特性”

  • 参与者模型为什么以及如何成为替代线程的高级并发模型
  • “高级并发模型”还有哪些其他模型

我最喜欢这个问题,正在等待答案,但既然还没有答案,这是我的

演员模特为什么以及如何成为演员 高级并发模型 替换线程

参与者可以摆脱可变的共享状态,这是很难正确编码的。(我的理解是)
actors
基本上可以被认为是具有自己线程的对象。您在参与者之间发送消息,这些消息将被参与者内的线程排队和使用。因此,actor中的任何状态都是封装的,不会被共享。因此,编写正确的代码很容易

另见

"先进"还有哪些型号? 并发模型“


请参见

演员模型并不会取代线程;在cpu级别,进程仍将有多个线程,这些线程在处理器内核上调度和运行。参与者的想法是用一种模型来取代这种潜在的复杂性,其支持者认为,这种模型使程序员更容易编写可靠的代码

参与者的想法是拥有单独的控制线程(用Erlang的说法是进程),这些线程只通过消息传递进行通信。更传统的编程模型是共享内存,并使用互斥体协调线程之间的通信。这仍然发生在actor模型的表面之下,但是细节被抽象掉了,程序员得到了基于消息传递的可靠原语

重要的一点是,参与者不一定要将1-1映射到线程——在Erlang的情况下,他们肯定不映射——每个内核线程通常会有许多Erlang进程。因此必须有一个调度程序,它将参与者分配给线程,这个细节也从应用程序程序员那里抽象出来

如果您对演员模型感兴趣,您可能想看看它在或中的工作方式

如果您对其他类型的新并发热感兴趣,您可能想看看clojure和haskell中的另一种方法


值得一提的是,创建高级并发模型的许多更积极的尝试似乎都发生在函数式语言中。可能是因为我相信(我自己也喝了一些kool-aid),不变性使并发变得更容易。

参见数据流编程。这是一种方法,是在通常的OOP设计之上的一层。换句话说:

  • 有一个场景,其中组件驻留
  • 组件有端口:生产者(输出,生成消息)和消费者(输入,处理消息)
  • 组件之间有预定义的消息:一个组件的生产者端口与另一个的消费者绑定
编程将在3层进行:

  • 编写数据流系统(语言、框架/服务器、组件API)
  • 编写组件(系统、基本和面向领域的组件)
  • 创建数据流程序:将组件放置到场景中,并定义它们之间的消息
维基百科文章是了解业务的良好起点:
另请参阅“参与者模型”、“数据流编程”等。

请参阅以下文章

另请参见


我不确定我是否会将数据流称为OOP上的一层,更确切地说,它是OOP的一种替代方案,具有一些概念交叉。根据Smalltalk,您可以说OOP是一种面向消息的语言,这就是数据流的含义。数据流系统的实现需要OOP(或者至少是推荐的自然方式),具体取决于DF体系结构。编写了DF系统,其中调度器和组件用C++编写,连接和参数用编译程序脚本语言定义,编译语言为C++代码,最后的结果是A.Out/ELF可执行文件。因此,底层架构是OOP,DF系统就是建立在它之上的。(类:Message、Port、Consumer、Producer、Component(abstract)等,当然还有很多组件类)。我想进一步说,不变性增加了系统的健壮性。并发性是软件复杂性的一个维度,其中健壮性的差异非常明显。即使不需要满足并发性问题,非常复杂的系统也可以从使用不变性中获益。另外,请记住,参与者模型也可以应用于网络,以开发请求处理的异步模型。事实上,考虑到多核将成为规则,这种抽象甚至可能在os api级别上很有趣(至少对我来说是这样)。考虑到标题中的所有商标,起初我认为这是一个笑话。