Web基础之系统I/O模型

调用者:程序进程/应用程序;被调用者:内核。

同步 / 异步

关注的是事件处理的消息(事件请求和响应) 的 通信机制;即在等待⼀件事情的处理结果时,被调⽤者是否提供完成通知。

同步synchronous:进程发出请求调⽤后,内核不提供通知机制,即⽂件IO处理完成后不通知进程,需要进程⾃⼰去问内核是否处理完成。

异步asynchronous:进程发出请求调⽤后,内核会在调⽤处理完成后返回调⽤结果给进程,Nginx是异步的。

阻塞 / 非阻塞

关注的是调⽤者在等待结果返回之前所处的状态。

阻塞:blocking,指IO操作需要彻底完成后才返回到⽤户空间,调⽤结果返回之前,调⽤者被挂起,⼲不了别的事情。

⾮阻塞:nonblocking,指IO操作被调⽤后⽴即返回给⽤户⼀个状态值,⽆需等到IO操作彻底完成,最终的调⽤结果返回之前,调⽤者不会被挂起,可以去做别的事情。

I/O 模型组合

以我去吃饭为例:我点了 10 个包⼦
 
同步与异步:
我点包⼦之后厨师是否告诉我:
同步:厨师做好包⼦后会放到指定位置,但是做好包⼦之前需要⾃⼰⼀次次去看包⼦做好没有,厨师不 会在包⼦做好之后通知我。
异步:厨师做好包⼦后告诉我包⼦做好放哪了。
 
阻塞与⾮阻塞:
我点包⼦后的状态:
阻塞:在厨师做包⼦期间⼀直在包⼦盘⼦前⾯等着,不能⼲别的事情。
⾮阻塞:点完包⼦就可以去⼲别的事情,⽐如去逛逛街或者买买买。
 

同步阻塞:我点完包⼦后不能去做别的事情,⽽且不知道包⼦有没有做好,需要⾃⼰⼀直等着并⼀次次的问厨师做好没有。

同步⾮阻塞:点完包⼦后可以去做别的事情,但是不能⻓时间做别的事情,因为我还是不知道包⼦有没有做好,也要⾃⼰⼀直等着并⼀次次的问厨师做好没有,只能抽空做点别的。

异步阻塞:我点完包⼦后不能去⾛做别的事情,但是厨师在做好包⼦后会告诉我,也就是我不⽤再⼀次次为厨师包⼦有没有做好了。

异步⾮阻塞:我点完包⼦后可以做别的事情,⽽且可以⼀直在做别的去事情,因为厨师在做好包⼦后会告诉我。

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值