阻塞IO和非阻塞IO
Posted james0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阻塞IO和非阻塞IO相关的知识,希望对你有一定的参考价值。
1 TCP协议
每一个TCP通信的的socket的内核里面都会有一个发送缓冲区和接收缓冲区
发送端 : send 报文 -- TCP发送缓冲区 --
接收端 :TCP接收缓冲区 -- receive TCP报文
2 滑动窗口协议
阻塞IO
发送一个消息,发送端必须准备好--发送缓冲区满,阻塞send操作,等缓冲区所有数据全部发出去后,send才可以继续发送
接收一个消息,接收端必须准备好 -- 接收缓冲区有一个大小,比如10,只有填满这个缓冲区,开始接收,接收完了,外面才可以再发送数据过来非阻塞IO
解决IO线程和socket一个解耦问题,引入一个事件机制来达到解耦目的,进程底层存在一个IO的线程调度,它不断扫描每一个socket缓冲区,当发现一个写缓冲区为空的时候,会产生一个socket可写事件通知一个线程去写数据,一次写不完 会等到下一次。 对于接收端,发现接收缓冲区可读,会发送一个可读事件给线程,如果不可读的话,这个线程就不会阻塞,可以去干其他事情。IO的多路复用
这个事件机制,就是IO多路复用的模型,linux里面可以使用select, 把线程扔到select里面中间件设置缓冲区的大小,就是TCP缓冲区
同步和异步,代表当前请求,比如 ajax是异步
针对当前请求的阻塞IO
同步阻塞,
同步非阻塞
异步阻塞
异步非阻塞
以上是关于阻塞IO和非阻塞IO的主要内容,如果未能解决你的问题,请参考以下文章