非阻塞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复用