两个并发线程或进程如何通信?

时间:2010-10-04 02:01:56

标签: multithreading concurrency

从广义上讲,进程间和线程间通信如何工作?

澄清:我理解这个问题不能在一个简洁的段落中详尽地回答。我正在寻找能够为初学者提供良好起点的答案 - 关于它如何运作的高级概念。

2 个答案:

答案 0 :(得分:6)

从广义上讲,有两种基本机制。

最简单的是共享内存。两个进程都可以访问一些可以读或写的内存,这样一个中的写入在另一个的读取中是可见的。

另一种机制是渠道,它就像两个进程之间的管道。在这种情况下,一个进程将一些数据放入管道,另一个进程将其拉出。这种机制具有破坏性,一旦消耗,数据就会从管道中丢失,因此接收过程最好用它做一些事情。

虽然第一种情况听起来更简单,但在实践中它却带来了危险。如果两个进程同时尝试写入,谁知道会发生什么。为了避免这种情况,使用第三种类型的IPC机制,锁定,用于在可以对共享状态执行某些操作时从一个进程向另一个进程发送信号。

从理论的角度来看,它们都是等价的。大多数操作系统都提供所有这些机制。

但并发进程不必进行通信。在“无共享”模型中,单个主任务可以准备许多工作任务。工作任务执行计算而无需额外输入。当所有工人完成后,主任务可以产生结果。这很有吸引力,因为IPC具有性能成本(同步),而且没有任何共享可以完全避免同步。

答案 1 :(得分:2)

进程间:进程之间 - 板级,系统5 IPC。具体来说,它将包括管道,信号量,共享内存,套接字,信号。通常,这些服务由OS内核提供

inter-thread:同一进程的线程之间的通信。你会使用线程同步原语 - 它可以由操作系统提供,它也可以在用户空间线程库中实现。