同一主机下进程间的通信方式

进程间通信方式一共六种:

无名管道,有名管道,信号,消息队列,共享内存,信号量。

接下来,咱们理解一下!

进程间通信的目的:

数据传输:一个进程需要将它的数据发送给另一个进程;
资源共享:多个进程之间共享同样的资源;
通知事件:一个进程需要向另一个进程发送消息,通知其发生了某种事情(比如进程终止父进程告诉子进程);
进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,能够及时知道它的状态改变。
 

一、继承了Unix传统的通信方式

1.无名管道

        1.只能用于具有亲缘关系(父子进程/兄弟进程)的进程之间的通信,速度慢,容量有限;

        2.半双工的通信方式,具有固定的读端fd[0]和写端fd[1];

        3.管道可以看成一种特殊的文件,对于它的读写我们实用文件IO中read和write。

2.有名管道

        1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到;

        2.半双工的通信方式,进程通过文件IO来操作有名管道;

        3.有名管道遵循先进先出原则,不支持lseek()。

3.信号

信号是一种异步通信方式。

信号产生的方式:

        1.硬件产生(组合键)信号

                ctrl+c  SIGINT

                ctrl+z  SIGTSTP

                ctrl+\  SIGQUIT

        2.内核发送信号    

                alarm()也称为闹钟函数,它可以在进程中设置一个定时器。当定时器指定的时间到时,内核就向进程发送SIGALRM信号;

                pause()函数是用于将调用进程挂起直到收到信号为止。

        3.软件方式产生信号

                raise()  自己给自己发送信号;

                kill()    给别人发送信号。 

二、systemV进程间通信方式

消息队列

        1.消息队列由消息队列ID来唯一标识;

        2.消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等;

        3.消息队列可以按照类型来发送/接收消息,相同类型先入先出,不同类型随意存取;

        4.全双工的一个通信方式。

共享内存

        1.共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝;

        2.为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间;

        3.进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高的效率;

        4.由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。

信号量

        信号量不能传送数据,一般和共享内存配合使用,实现共享内存同步。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值