3

关于哪个模型更好的讨论情况,我不太了解,所以我想问一个非常直截了当的问题:看起来是不是两个对立的观点真的引起了激烈的争论?例如,基于原型/类的 OOP 或动态与静态类型

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

4

1 回答 1

7

来自维基百科

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

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

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

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

我的两分钱值。
这两种范式并不竞争,它们的目的不同,我们谈论的是异步通信与同步通信。对于可伸缩性,通常最好尽可能使用异步,因为只要有额外的带宽,您总是可以推迟到另一个进程或处理结果。并非总是可以将算法拆分为异步工作。

于 2010-05-09T15:59:01.347 回答