在并行编程通信
在并行编程中,被派去执行任务的wokers通常需要建立沟通,以便合作解决问题。 在大多数情况下,这种通信的建立方式是可以在worker之间交换数据。 在并行编程方面,有两种通信形式更广为人知:共享状态和消息传递。 在以下各节中,将对两者进行简要说明。
理解共享状态
worker之间最著名的一种交流方式是共享状态。 共享状态似乎简单易用,但有很多缺陷,因为其中一个进程对共享资源进行的无效操作会影响所有其他进程,从而产生不良结果。 由于显而易见的原因,这也使得程序无法在多台机器之间分发。
为了说明这一点,我们将使用一个真实的案例。 假设你是某家银行的客户,而这家银行只有一名出纳员。 当你去银行时,你必须排队等待机会。 进入队列后,您会注意到一次只有一位顾客可以使用收银员,收银员不可能同时接待两位顾客而不会出错。 计算提供了以受控方式访问数据的方法,并且有多种技术,例如互斥锁(mutex)。
互斥锁(Mutex)可以理解为一个特殊的过程变量,表示访问数据的可用性级别。 也就是说,在我们现实生活中的例子中,客户有一个号码,在特定的时刻,这个号码会被激活,收银员将专门为这个客户服务。 在流程结束时,这位顾客将为下一位顾客腾出收银员,依此类推。
在某些情况下,程序运行时数据在变量中具有常量值,并且共享数据仅用于读取目的。 因此,访问控制不是必需的,因为它永远不会出现完整性问题。
理解信息传递
当我们旨在避免源自共享状态的数据访问控制和同步问题时使用消息传递(Message passing)。 消息传递由运行进程中的消息交换机制组成。 每当我们开发具有分布式体系结构的程序时,它都非常常用,其中放置它们的网络中的消息交换是必要的。 例如,Erlang 等语言使用此模型在其并行架构中实现通信。 一旦在每次消息交换时都复制了数据,就不可能出现访问并发方面的问题。 尽管内存使用率似乎高于共享内存状态,但使用此模型也有优势。 它们如下:
- 没有数据访问并发.
- 消息可以在本地(各种进程)或分布式环境中交换.
- 这使得可伸缩性问题发生的可能性降低,并实现了不同系统的互操作性.
- 总的来说,按照程序员的方式维护起来很容易.
创建日期: 2015年2月14日