码迷,mamicode.com
首页 > 其他好文 > 详细

同步与阻塞

时间:2019-04-29 12:31:07      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:io模型   sync   syn   返回   传统   异步   用户   async   操作   

以socket.read()为例子:

  • 同步阻塞模型:传统的BIO里面socket.read(),如果TCP RecvBuffer里没有数据,函数会一直阻塞,直到收到数据,返回读到的数据。

  • 同步非阻塞模型:对于NIO,如果TCP RecvBuffer有数据,就把数据从网卡读到内存,并且返回给用户;反之则直接返回0,永远不会阻塞。

  • 异步非阻塞模型:最新的AIO(Async I/O)里面会更进一步:不但等待就绪是非阻塞的,就连数据从网卡到内存的过程也是异步的。

换句话说,BIO里用户最关心“我要读”,NIO里用户最关心"我可以读了",在AIO模型里用户更需要关注的是“读完了”。

NIO一个重要的特点是:socket主要的读、写、注册和接收函数,在等待就绪阶段都是非阻塞的,真正的I/O操作是同步阻塞的(消耗CPU但性能非常高)。

同步与阻塞

标签:io模型   sync   syn   返回   传统   异步   用户   async   操作   

原文地址:https://www.cnblogs.com/zhz-8919/p/10789546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!