进程间通信IPC

进程间通信的目的是实现进程间数据的共享。

 

为什么进程空间是完全独立的? 防止你去害别人也防止别人害你。

如何实现?使用虚拟地址空间

 

原理:尽管进程空间是各自独立,但它们共享OS,所以OS作为所有进程共享的第三方,会提供相关机制,来实现进程间数据的转发,达到数据共享的目的。

方式:

1.信号

2.管道  无名管道和有名管道

 管道其实就是内核自己所在的物理内存空间中开辟的一段缓存空间,比如char buf[1024],

用文件的方式来读写管道。 无名管道只能用于亲缘进程之间,因为无名管道没有文件名,进程就没办法用open打开管道文件来得到文件描述符,所以只能通过父进程先调用pipe创建出管道,并且得到读写管道的文件描述符,然后再fork出子进程,让子进程与父进程共享此文件描述符,从而父子进程能操作同一个管道。

 

只能实现单向通信,如果父进程的读端读走了数据的话,子进程就读不到了。 要实现双向通信的话,需要建立两个管道。 

 

 

3.消息队列

由内核创建的用于存放消息的链表。 链表的节点就是存放一个结构体消息,包含消息编号和正文。

消息队列有点像信息公告牌,发送信息的人将某编号的消息挂到公告牌上,接受消息的人去公告牌上取对应编号的消息。使用消息队列可以实现网状交叉通信。

4.共享内存

映射一段能被其他进程所访问的内存。直接使用地址来读写缓存,对于大数据量的通信效率高,而且快,因为不像消息队列一样经过API封装,需要重重的OS函数调用后才通过地址去读写。

5.信号量  (一个计数器)

当多进程/线程进行共享操作时,用于资源保护,防止出现互相干扰的情况。 作用就是资源的保护。

资源保护操作:互斥和同步。(加锁机制)

 

6.套接字

可以实现不同计算机上进程间通信。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值