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

阻塞IO和非阻塞IO

时间:2018-07-08 18:57:28      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:报文   tcp报文   调度   通知   事件通知   针对   inux   linux   解耦   

1 TCP协议
每一个TCP通信的的socket的内核里面都会有一个发送缓冲区和接收缓冲区

发送端 : send 报文 -- TCP发送缓冲区 --
接收端 :TCP接收缓冲区 -- receive TCP报文

2 滑动窗口协议

  1. 阻塞IO
    发送一个消息,发送端必须准备好--发送缓冲区满,阻塞send操作,等缓冲区所有数据全部发出去后,send才可以继续发送
    接收一个消息,接收端必须准备好 -- 接收缓冲区有一个大小,比如10,只有填满这个缓冲区,开始接收,接收完了,外面才可以再发送数据过来

  2. 非阻塞IO
    解决IO线程和socket一个解耦问题,引入一个事件机制来达到解耦目的,进程底层存在一个IO的线程调度,它不断扫描每一个socket缓冲区,当发现一个写缓冲区为空的时候,会产生一个socket可写事件通知一个线程去写数据,一次写不完 会等到下一次。 对于接收端,发现接收缓冲区可读,会发送一个可读事件给线程,如果不可读的话,这个线程就不会阻塞,可以去干其他事情。

  3. IO的多路复用
    这个事件机制,就是IO多路复用的模型,linux里面可以使用select, 把线程扔到select里面

  4. 中间件设置缓冲区的大小,就是TCP缓冲区

同步和异步,代表当前请求,比如 ajax是异步

针对当前请求的阻塞IO
同步阻塞,
同步非阻塞
异步阻塞
异步非阻塞

阻塞IO和非阻塞IO

标签:报文   tcp报文   调度   通知   事件通知   针对   inux   linux   解耦   

原文地址:https://www.cnblogs.com/james0/p/9280727.html

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