Concurrency 具有`消息传递/共享状态';以“Holywar';”形式出现的困境(并发和分布);?

Concurrency 具有`消息传递/共享状态';以“Holywar';”形式出现的困境(并发和分布);?,concurrency,message-passing,shared-state,Concurrency,Message Passing,Shared State,我对关于哪种模式更好的讨论状态知之甚少,所以我想问一个非常直截了当的问题:两种对立的观点是否真的加剧了争论?例如,基于原型/类的OOP或动态与静态类型 (虽然这些都不是很合适的例子,但我不知道如何更清楚地表达我的问题) 在一些并发计算系统中,并发组件之间的通信对程序员是隐藏的(例如,通过使用未来),而在另一些系统中,它必须显式处理。显性沟通可分为两类: 共享内存通信 并发组件通过改变共享内存位置的内容进行通信(以Java和C#为例)。这种类型的并发编程通常需要应用某种形式的锁定(例如,互斥锁、信

我对关于哪种模式更好的讨论状态知之甚少,所以我想问一个非常直截了当的问题:两种对立的观点是否真的加剧了争论?例如,基于原型/类的OOP或动态与静态类型

(虽然这些都不是很合适的例子,但我不知道如何更清楚地表达我的问题)

在一些并发计算系统中,并发组件之间的通信对程序员是隐藏的(例如,通过使用未来),而在另一些系统中,它必须显式处理。显性沟通可分为两类:

共享内存通信 并发组件通过改变共享内存位置的内容进行通信(以Java和C#为例)。这种类型的并发编程通常需要应用某种形式的锁定(例如,互斥锁、信号量或监视器)来协调线程之间的关系

消息传递通信 并发组件通过交换消息进行通信(以Erlang和occam为例)。消息交换可以异步执行,或者可以使用集合样式,其中发送方阻塞消息直到接收到消息。异步消息传递可能是可靠的,也可能是不可靠的(有时称为“发送和发送”)。消息传递并发比共享内存并发更容易推理,通常被认为是一种更健壮的并发编程形式。有各种各样的数学理论可用于理解和分析消息传递系统,包括参与者模型和各种过程计算。消息传递可以在对称多处理器上有效地实现,无论有无共享一致内存

共享内存和消息传递并发具有不同的性能特征;通常(尽管不总是),消息传递系统中的每进程内存开销和任务切换开销较低,但消息传递本身的开销大于过程调用。这些差异往往被其他性能因素所压倒。上面的文章说异步通信可能不可靠,但这可以通过使用事务性队列系统(MQSeries上的JMS、OpenMQ等)来避免

我的两分钱价值。

这两种模式并不相互竞争,它们的目的不同,我们所说的是异步通信与同步通信。对于可伸缩性,通常最好尽可能采用异步方式,因为只要有额外的带宽,您就可以始终推迟到另一个进程或处理结果。只是不可能总是将算法分割成异步工作。

我看不到任何圣战。消息传递是更干净、更安全的解决方案,但有时速度太慢。一些计算模型受益于共享状态,一些受益于消息传递。这完全取决于你的问题是什么。