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

Multithreading 两个并发线程或进程如何通信?,multithreading,concurrency,Multithreading,Concurrency,从广义上讲,进程间和线程间通信是如何工作的 澄清:我理解这个问题不能用一个简洁的段落来详尽地回答。我正在寻找答案,这将是初学者的一个很好的起点-它如何工作的高级概念。进程间:进程间-基本上,System 5 IPC。具体来说,它将包含管道、信号量、共享内存、套接字和信号。通常,这些服务由操作系统内核提供 线程间:同一进程的线程之间的通信。您将使用线程同步原语,它可以由操作系统提供,也可以在用户空间线程库中实现 大体上,有两种基本机制 最简单的是共享内存。这两个进程都可以访问一些可用于读或写的内存

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


澄清:我理解这个问题不能用一个简洁的段落来详尽地回答。我正在寻找答案,这将是初学者的一个很好的起点-它如何工作的高级概念。

进程间:进程间-基本上,System 5 IPC。具体来说,它将包含管道、信号量、共享内存、套接字和信号。通常,这些服务由操作系统内核提供


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

大体上,有两种基本机制

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

另一种机制是通道,其作用类似于两个进程之间的管道。在这种情况下,一个进程将一些数据放入管道,另一个进程将其取出。这种机制具有破坏性,一旦被消耗,数据就会从管道中丢失,因此接收过程最好对其进行处理

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

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


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

这个问题有很多答案,具体取决于您所谈论的系统。你是在谈论Win32、pthreads、Erlang、MPI、Linda spaces还是什么?你在期待一篇论文吗?这是一个非常宽泛的问题。@philfreo,你的意思是你个人并不关心答案,但是,以维基百科的方式,你正在试图扩展内容主体吗?“依我看,那是不诚实的。@philfreo:把它想象成让一个忙碌的秘书做一些工作。你把你的请求写在备忘录上,贴在你想让秘书处理的文件上,然后把文件放在秘书的收件箱里。秘书将从收件箱中挑选一些任务(根据优先级或先到先得或最简单的任务优先),然后开始处理。当秘书完成处理后,文件将被放入出纸盘。您需要观察出纸盘,才能知道您的请求已完成。@philfreo:高级概念被称为。然而,真正的程序员使用许多机器级快捷方式(共享内存)来避免与真正的消息传递相关的开销。还有一种并发编程不进行通信(任务开始之前和任务结束之后除外),例如map reduce。