标签:报文 tcp报文 调度 通知 事件通知 针对 inux linux 解耦
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
同步阻塞,
同步非阻塞
异步阻塞
异步非阻塞
标签:报文 tcp报文 调度 通知 事件通知 针对 inux linux 解耦
原文地址:https://www.cnblogs.com/james0/p/9280727.html