23.使用非阻塞IO 2

mac2025-10-24  6

非阻塞io另一个情况是对方接收数据缓慢,带宽不匹配

水位太高设置high water mark

low water mark一般设置0,等待数据全部发完,在接收新的数据

non-block 写proxy,在七层http。

具体的例子:echo使用non-blocking读,等read事件read去读放在本机缓冲区中。等write事件去写。

如果对方只发送不接收,从socket中读,不断的向缓冲区加,内存暴涨,

write如果是阻塞的会影响到其他客户端。

标准处理:如果发送缓冲区高于1M,就停止读它

LT对于读不会造成饥饿

饥饿:数据没读完,不会告诉你数据没读完,等下一次对方发送数据到达告诉你。

有1000字节数据,你只读了800字节,LT还会告诉你有数据可读

ET告诉你已经读过了,没有新的数据到来,200字节会呆在那里,直到对方发送数据过来

多线程io复用

最新回复(0)