进程间通信的两种方式:阻塞和非阻塞

按照实现的方法来分,进程间的通信方式可以有很多种:管道、消息传递、共享内存......但从同步性角度来看,进程间的通信方式只有两种:阻塞和非阻塞,也称同步和非同步。

阻塞

顾名思义,被截停在那,需要等待。

非阻塞

不会被截停,不需要等待。
进程间的通信包括发送和接受信息两个方面。下面我们分别从两个方面看看阻塞和非阻塞的区别。

阻塞发送

发送进程阻塞,必须等待,直到消息被接受。如果消息没有被接受,那么进程一直在等待,不会去执行其他任务。
  • 就好比外卖小哥送外卖;外卖小哥把外卖送达时,会一直拿着外卖在那等你,直到你把外卖拿到手他才会离开去送其他外卖。(这种外卖小哥是我们所热爱滴!)

非阻塞发送

发送进程发送完消息便去执行其他任务(不管消息是否被接受),不会等待。
  • 就好比外卖小哥把外卖送到给定地点后,直接把外卖放在那里,然后通知你来取外卖,接着立即转身离开去送其他外卖。(这种外卖小哥不太地道~)

阻塞接受

当接到通知后,接受进程立即前去等待接受信息;接收进程会一直在等待,直到接受到消息才会离开去执行其他任务。
  • 好比考完期末等着出成绩,你一直在盯着屏幕看,成绩不出你的眼睛就绝不会离开屏幕!(大家应该不会这么做吧😙~)

非阻塞接受

收到通知后,接收进程过来查看是否有消息到来,有则接收并返回,没有则直接返回(接收进程接收到一个有用的消息或者空消息)。
  • 好比考完期末等着出成绩,你不会一直盯着手机屏幕等成绩,但你会每隔十几分钟就去查一下成绩,然而往往查不到成绩~(大家应该都是这么做吧🤤)

(为什么阻塞又称同步,非阻塞又称异步呢?这是因为在阻塞的通信中,发送进程和接受进程在进行消息传递时会碰面;而在非阻塞通信中,发送进程和接受进程一般是不会有碰面的。)

与阻塞和非阻塞相关的是缓存的容量大小。缓存的容量大小决定了进程间的通信是否阻塞(主要影响的是发送者的通信方式)。

缓存

1)零容量

在这种情况下,由于没有空间用于消息的存放,因此发送者必须阻塞,直到接受者接收到消息。

2)有限容量

对于有限容量的缓存而言,发送者是否需要等待要根据缓存是否为满来判定。当缓存已满时,没有更多的空间用于消息的存放,此时的缓存相当于零容量,发送者要等待;若缓存未满,那么发送者无需等待,直接将消息放在队列中即可。

3)无限缓冲

由于缓存足够大,发送者无需等待,直接将消息放于队列中即可。



以上便是我对于阻塞和非阻塞通信方式的理解,如果有错误的地方或者讲得不清楚的地方,欢迎大家在评论区多多交流🤤。
#操作系统##进程##面试#
全部评论
比喻有点生动哈
2 回复 分享
发布于 2022-08-16 08:59
很合理,挑不出毛病来。
点赞 回复 分享
发布于 2022-08-16 18:25
很言简意赅,很不错
点赞 回复 分享
发布于 2022-08-16 12:52

相关推荐

暑期是进不了大厂了想问问前端友友们 ,后面应该如何沉淀自己,我想秋招再冲一下尤其是八股,应该抓哪一块是重点,理解到什么程度呢,要学到什么深度才能抗住拷打。还有场景题如何去准备。期待友友们的解答。
命烈焰带我飞走:找个中厂小厂先看看吧,去了熟悉熟悉项目,简历上扒点东西,之后刷刷sobb上百度美团快手的日常实习,流程都比较快轮次也少,别给自己太大压力,一步一步来,先不用想着暑期,转正,秋招那些事情,另外如果可能的话可以关注下面试时候的形象,穿搭,环境这些,其实实习主要就是看个眼缘,看着好看声音好听其实加分不少..八股这些不要死记硬背,挨个拿去问问chatgpt,这个东西做出来是为了解决什么问题,有啥效果,自己有想法有个模糊的概念就可以了,人家也知道你是学生,实习生没有什么kpi,放你去面都是希望能把你招进去的,场景题算法题没做过你可以边试着写边跟面试官说你的想法思路,也可以直说没见过让他们给你提示,反正最后都是与或非顺序分支循环存取值那套。总之建议是别为了秋招..出去旅旅游放松放松,少投几家少背八股多写写代码
点赞 评论 收藏
分享
爱喝奶茶的垂耳兔拥抱太阳:感觉项目和实习没有技术亮点和难点,单纯说了自己干了啥
点赞 评论 收藏
分享
评论
10
10
分享

创作者周榜

更多
牛客网
牛客企业服务