阻塞IO和非阻塞IO

Posted james0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阻塞IO和非阻塞IO相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式Linux开发27——Linux阻塞和非阻塞IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

阻塞IO和非阻塞IO

什么是阻塞式和非阻塞io流?

高效IO——五种IO模型概念和非阻塞IO