阻塞非阻塞,同步异步四种I/O方式

 2023-09-16 阅读 13 评论 0

摘要:举一个去书店买书的例子吧: (同步)阻塞: 你去书店买书,到柜台告诉店员,需要买一本APUE,然后一直在柜台等。(阻塞) 店员拿到书以后交给你。 (同步)非阻塞: 你去书店买书,到柜台告诉店员

举一个去书店买书的例子吧:

 

(同步)阻塞:

你去书店买书,到柜台告诉店员,需要买一本APUE,然后一直在柜台等。(阻塞)

店员拿到书以后交给你。

 

(同步)非阻塞:

你去书店买书,到柜台告诉店员A,需要买一本APUE。但是你不在柜台等了,而是出去遛弯。(非阻塞)

隔几分钟回去柜台问一次:“我的书来了没有?”“我的书来了没有?”

终于有一次书来了,你就拿着书走了

 

(同步)I/O多路复用(poll/select/epoll):

去书店买书,告诉店员自己要买APUE,然后拿到一个号。每个顾客都是这样。

店员每拿一本书出来就叫号,这样每个人都能快速拿到自己的书

 

异步(libevent/libev/libuv):

你去书店买书,到柜台告诉店员A,需要买一本APUE。但是你丢下自己的地址,告诉店员,书你拿回来了直接叫快递送到下面这个地址就行了。

店员拿会书以后直接叫个快递,送到你家。

(如果是异步阻塞就是:店家拿到书以后会送给你,你还要一直在这等。比较奇葩)

 

阻塞/非阻塞则是 API 调用者(我)的等待方式。

同步/异步是API 被调用者(店员)的通知方式。

参考:https://ring0.me/2014/11/sync-async-blocked/

 

转载于:https://www.cnblogs.com/qooweds/p/5787025.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/69810.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息