白话IO模型的演进

本文只是概括思路,具体概念具体底层机制还请看其他文章。
以餐厅点餐为例子。服务员是本例子的主角。

  1. 客人:IO请求
  2. 服务员:线程
  3. 炒菜时:IO未就绪状态
  4. 炒好菜:IO就绪了
  5. 上菜:程序处理IO请求的数据
  6. 后厨:内核
  7. 客人菜单:IO请求的数据

同步阻塞

每来一位客人,派一个新服务员把客人菜单送到后厨,炒好菜之前服务员寸步不离。

此时的服务员进入阻塞状态让出时间片,相当于神游天地,需要重新进入就绪态才能被cpu调度

炒好菜后,服务员亲自上菜。

同步非阻塞

每来一位客人,派一个新服务员把客人菜单送到后厨,炒好菜之前服务员不断询问后厨菜是否炒好。

忙等状态,不主动放弃cpu执行权。期间服务员可以不断询问也可以抽空干点其他事,主要看代码逻辑

炒好菜后,服务员亲自上菜。

多路复用

每来一位客人,服务员会告诉后厨 “有人点了菜”,然后由同一个服务员不停地依次地询问后厨哪个客人菜单炒好了。

有人点了菜:相当于将IO操作注册到select中

炒好菜后,服务员亲自上菜。(此时若其他客人菜单也炒好了,也得等他把当前客人的菜上好)

Reactor模式

每来一位客人,服务员会告诉后厨 “有人点了菜”,然后由同一个服务员不停地依次地询问后厨哪个客人菜单炒好了。

此前服务员有两个职责,一个是等炒好菜,第二个是上菜。相当于既轮询也执行业务逻辑

而现在:服务员分成了等菜员和上菜员,等菜员只需少量或者一个人来轮询后厨是否炒好菜,若炒好菜,指派上菜员给他们上菜。上菜员越多上菜越及时。上菜员不上菜时可以干别的工作。

上菜员:用户线程
等菜员:轮询IO操作的handle_event事件循环

reactor模式

异步IO

每来一位客人,服务员会告诉后厨 “有人点了菜”,然后去做其他事情,后厨炒好了会通知他上菜。

参考文章
https://www.cnblogs.com/lovejune/p/12547470.html

https://blog.youkuaiyun.com/weixin_30535913/article/details/97485936

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值