进程和线程之间的通信

Posted

技术标签:

【中文标题】进程和线程之间的通信【英文标题】:The communication between processes and threads 【发布时间】:2014-03-19 08:11:11 【问题描述】:

我知道有几种方法可以实现 IPC。如管道、套接字等。

这是我的问题:

假设我们有一个父进程 A 和两个子进程 B 和 C。

我知道如果 B 想和 C 通信,它需要使用 IPC。

Q1:在这种情况下,IPC 方法是否受到限制?要实现这种IPC,是否只能使用某些类型的IPC?比如它只能使用管道,共享内存但信号。

Q2:如果子进程想和它的父进程通信,需要IPC吗? (B 有它的孩子 D 怎么样,如果 D 想和 A 通信,需要 IPC 吗?) Q3:如果B中的一个线程和D中的一个线程,这两个线程之间是否需要IPC才能进行通信?

Q4:和Q3一样的问题,请问两个线程一个在子进程,一个在父进程?

谢谢

【问题讨论】:

【参考方案1】:

A1. 这取决于您的设计。 父级可以通过分配必要的 IPC 结构(管道、共享内存等)以及将 IPC 密钥传播给子级来帮助在其子级之间建立 IPC。 如果父级为结构分配和密钥传播完成了所有必要的工作,您可以使用任何 IPC 方法而没有任何限制。 如果父进程未在其子进程之间建立 IPC 或未在它们之间共享 IPC 密钥,那么您在不相关(非分叉)进程之间确实有任何其他 IPC 的限制。例如,在这种情况下,您不能使用管道,但仍然可以使用共享内存或命名管道(考虑键或名称约定)。

A2.如果父母想与孩子交流,它可以(并且应该)使用 IPC,因为它们是不同的进程。 由于父进程及其子进程是相关进程,因此可以不受限制地使用任何 IPC 类型。

A3.由于线程属于不同进程,所以需要使用IPC。 应该使用哪种类型的 IPC?这取决于您的设计。答案 1 和 2 试图解释它。

A4. 因为线程属于不同进程,所以需要 IPC。 由于进程是相关(父进程和子进程),理论上可以使用任何 IPC 方法。

【讨论】:

以上是关于进程和线程之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

进程与线程 及之间通信

进程和线程的区别(简要总结)

安卓多线程间通信和多进程之间通信有什么不同?分别怎么实现?

程序进程线程之间的区别

进程通信和线程通信

多线程和多进程通信原理