进程间的通信方式

进程间的通信方式(InterProcess Communication)有:管道、内存共享、消息队列、套接字socket、信号量、信号

*fork()一个进程,会有两次返回值,在父进程中返回子进程的PID,在子进程中返回0;
***进程是资源分配的最小单元,线程是最小的执行单元,每个进程有单独的地址空间,每个线程共享进程的地址空间和数据段。进程间的通信麻烦,切换也麻烦。线程间的通信简单但是容易对共享资源的同时访问出问题。多个进程间相互不影响,一个进程挂了并不影响另一个。多个线程间有影响,其中一个挂了就整个挂了。

1、管道:fd[1]写入、fd[0]读出

(1)分为命名管道fifo和无名管道pipe;
(2)无名管道只能用于有亲缘关系的进程间的通信,例如父子进程;
(3)而命名管道可以用于没有亲缘关系间的进程通信,文件的形式,有点像对文件的读写操作;
(4)他们都是半双工的通信方式,单向无格式字节流的传输,所以两个进程间要相互进行通信就必须建立两条管道
(5)通过内核缓冲区实现数据传输的。先进先出,读出数据后就会清除对应的内存
(6)若要数据流从父进程流向子进程,则关闭父进程的读端(fd[0])与子进程的写端(fd[1]);反之,则可以使数据流从子进程流向父进程。这有点可以理解为有一条管道,进程1从进程1的fd[1]放水进管道,水经过管道后从进程1的fd[0]流回。同理进程2也有对应的fd[1]和fd[0]对管道的操作。如果堵住进程1的fd[0]和进程2的fd[1],那么水就会从进程1的fd[1]流到进程2的fd[0]了。

2、共享内存

(1)开辟一个存储区,该存储区可以被多个进程映射到自身的地址空间中
(2)效率高只需拷贝2次,不像管道需要在内核和用户之间进行4次拷贝

3、消息队列

(1)是一个消息链接表,保存在内核中
(2)可以读写指定类型的数据,不必都只能从头读到尾

4、信号量

信号量一般用于进程间对共享资源的访问控制

5、信号SINAL

信号的捕获和处理,给不在运行状态的进程也可发信号,信号会先交由内核保存,

6、套接字

支持两个不同主机上的进程进行IPC

参考博客:进程间的5种通信方式介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值