关于多线程:进程通信方式

41次阅读

共计 1044 个字符,预计需要花费 3 分钟才能阅读完成。

https://cloud.tencent.com/dev…
过程通信:

每个过程各自有不同的用户地址空间, 任何一个过程的全局变量在另一个过程中都看不到,所以过程之间要替换数据必须通过内核, 在内核中开拓一块缓冲区, 过程 A 把数据从用户空间拷到内核缓冲区, 过程 B 再从内核缓冲区把数据读走, 内核提供的这种机制称为过程间通信。
1. 匿名管道通信
匿名管道(pipe):管道是一种半双工的通信形式,数据只能单向流动,而且只能在具备亲缘关系的过程间应用。过程的亲缘关系通常是指父子过程关系。
2. 通过匿名管道实现过程间通信的步骤如下:

父过程创立管道,失去两个⽂件描述符指向管道的两端
父过程 fork 出子过程,⼦过程也有两个⽂件描述符指向同⼀管道。
父过程敞开 fd[0], 子过程敞开 fd[1],即⽗过程敞开管道读端, ⼦过程敞开管道写端(因为管道只反对单向通信)。⽗过程能够往管道⾥写, ⼦过程能够从管道⾥读, 管道是⽤环形队列实现的, 数据从写端流⼊从读端流出, 这样就实现了过程间通信。
具体可参考文章:过程间的通信形式——pipe(管道)
2 高级管道通信
高级管道 (popen):将另一个程序当做一个新的过程在以后程序过程中启动,则它算是以后程序的子过程,这种形式咱们成为高级管道形式。
3 有名管道通信
有名管道 (named pipe):有名管道也是半双工的通信形式,然而它容许无亲缘关系过程间的通信。
4 音讯队列通信
音讯队列 (message queue):音讯队列是由音讯的链表,寄存在内核中并由音讯队列标识符标识。音讯队列克服了信号传递信息少、管道只能承载无格局字节流以及缓冲区大小受限等毛病。
5 信号量通信
信号量 (semophore):信号量是一个计数器,能够用来管制多个过程对共享资源的拜访。它常作为一种锁机制,避免某过程正在访问共享资源时,其余过程也拜访该资源。因而,次要作为过程间以及同一过程内不同线程之间的同步伎俩。
6 信号
信号 (sinal):信号是一种比较复杂的通信形式,用于告诉接管过程某个事件曾经产生。
7 共享内存通信
共享内存 (shared memory):共享内存就是映射一段能被其余过程所拜访的内存,这段共享内存由一个过程创立,但多个过程都能够拜访。共享内存是最快的 IPC 形式,它是针对其余过程间通信形式运行效率低而专门设计的。它往往与其余通信机制,如信号两,配合应用,来实现过程间的同步和通信。
8 套接字通信
套接字(socket):套接口也是一种过程间通信机制,与其余通信机制不同的是,它可用于不同机器间的过程通信。

正文完
 0