procceses如何相互沟通?到目前为止,使用我学到的所有内容编程,我无法解释套接字,文件系统和其他在程序之间发送消息的工作方式。
顺便说一句,如果要添加任何特定于OS的操作系统,我会使用基于Linux的操作系统。提前致谢。这个问题一直困扰着我。我也猜测内核与它有关。
答案 0 :(得分:9)
对于大多数IPC(进程间通信)机制,您的问题的一般答案是:进程A调用内核将指针传递给缓冲区,数据要传输到进程B,进程B调用内核(或在调用内核时已被阻塞)将指针传递给缓冲区以填充来自进程A的数据。
这种一般性描述适用于sockets,pipes,System V message queues,普通文件等。正如您所看到的,通信成本很高,因为它涉及至少一个上下文切换。
Signals构成一个异步IPC机制,其中一个进程可以向另一个进程发送一个简单的通知,触发第二个进程注册的处理程序(如果没有注册处理程序,则可选择不执行任何操作,停止或终止该进程,具体取决于在信号上。)
为了传输大量数据,可以使用System V shared memory,在这种情况下,两个进程可以访问主存储器的相同部分。请注意,即使在这种情况下,也需要使用同步机制,如System V semaphores,这也会导致上下文切换。
这就是为什么当流程需要经常进行通信时,最好在一个流程中创建它们。