epoll中的ET和LT模式的疑问
假设现在对方一口气发送了大量数据过来,以至于这边没法通过一次read就全部读取完毕。由于ET模式只会通知一次,所以这边对应的数据读取函数中不得不循环read多次,以保证把对方本次发送的数据全部读取完毕。比如说这样:while ((n = read(...)) \u0026gt; 0) { ....}否则如果你只read一次,那么剩下的那些数据可能就永远也没有通知了。由于上面那个循环的存在,文件描述符必须是非阻塞的。而LT模式会持续通知直到你把对方本次发送的数据全部读取完毕,所以这边对应的数据读取函数中只需要read一次就行了,而且绝对不会阻塞(此处不太准确)。=============================我评论区里关于阻塞模式下传入给read/write的buffer尺寸过大会导致阻塞的说法有问题。对于TCP来说,阻塞模式的read不会等到传入的buffer已经填满或遇到EOF了才返回,这跟普通磁盘文件的读取不太一样。但是TCP阻塞模式的write一般要等到buffer中所有数据都写入完毕才会返回。谢谢 @Kaleo Von的指正。
推荐阅读
- 鄂温克冬季马赛-30℃极寒开赛:寒冬中的火热派对
- 安徽合肥:辅警管理新模式电诈压降显成效
- 大雪@大雪腌肉 适当进补 今日大雪
- 甘肃乡贤文化渐兴:兰州高新区探“村委+乡贤”模式
- 互联网在线音乐行业有哪些可能的盈利模式
- |电商事业中的“闪光少年”
- 国内有类似Ebay中bid(竞标)模式的网购平台吗
- 21世纪经济报道|携手国家电网 东风汽车将推换电模式
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- 经观汽车|日系车企中的“异类”?东风日产将导入e-POWER技术大干增程式混动 | 经观汽车
