- 主题:这么多年过去了,选 ET 还是 LT 有定论吗?
用 epoll 的时候,所谓的「边缘触发」和「水平触发」。
我咋觉得这 2 个没有本质区别。
用哪个无所谓,捡自己顺手,不搞出 bug 的就行了?
--
FROM 101.71.39.*
如果每次epoll_wait返回来,你都是把数据读完,那可能确实感知不到明显差别
【 在 Naory 的大作中提到: 】
: 用 epoll 的时候,所谓的「边缘触发」和「水平触发」。
: 我咋觉得这 2 个没有本质区别。
: 用哪个无所谓,捡自己顺手,不搞出 bug 的就行了?
--
FROM 123.168.94.*
这种都是代码上明显就能解决的问题。
我的意思是除了这种,有没有什么特别的考量,选某种会更好一点
【 在 wallyz 的大作中提到: 】
: 如果每次epoll_wait返回来,你都是把数据读完,那可能确实感知不到明显差别
--
FROM 101.71.39.*
号称有的场景下ET性能会稍微好那么咪咪小一点点,但通常没有明显差别。
主要是早期只有ET的时候,很多人(包括很多高手)写不好ET的程序,
各种考虑不周,很容易堵死,后来才出了LT让大家用起来省心。
现在一般也没啥特别需要用ET的理由。你看Redis用LT不也跑得好好的。
【 在 Naory 的大作中提到: 】
: 这种都是代码上明显就能解决的问题。
: 我的意思是除了这种,有没有什么特别的考量,选某种会更好一点
--
FROM 115.193.176.*
这样说来就是一个细节比较多代码问题:对自己编码能力有信心的可以直接选 ET
【 在 adoal 的大作中提到: 】
: 号称有的场景下ET性能会稍微好那么咪咪小一点点,但通常没有明显差别。
: 主要是早期只有ET的时候,很多人(包括很多高手)写不好ET的程序,
: 各种考虑不周,很容易堵死,后来才出了LT让大家用起来省心。
: ...................
--
FROM 101.71.39.*
印象中Nginx是ET用得比较成功的案例,一般还是图省心用LT
【 在 Naory 的大作中提到: 】
: 这样说来就是一个细节比较多代码问题:对自己编码能力有信心的可以直接选 ET
--
FROM 122.225.220.*
其实关于ET,可能存在两种理解,
一种理解是:
ET的POLLIN只在数据从无到有触发,而ET的POLLOUT只在BUFFER从满到不满触发,换言之,在已经有数据,然后又收到一些数据的时候,应该不触发ET POLLIN,而BUFFER的空间从小变大(比如TCP收到了ACK)的时候,也不应该触发ET的PULLOUT,至少Linus Torvalds是这么认为的,但是实际上未必是如此
另一种理解是:
当收到新的数据的时候,就会触发PULLIN,即使是ET也会触发,因为fd变化了;同理,收到ACK之后,BUFFER大小变化了,所以会触发PULLOUT,即使是ET也是
而观察内核的代码,skb销毁的时候会触发POLLOUT,而sk_data_ready的时候会调用sk_data_ready会触发POLLIN,所以实际上,内核的实际行为可能符合后一种理解
所以,如果后一种是实际上内核的行为的话,在一个有数据连续收发的连接上,每次进来的ACK,以及每次进来的data,都会造成epoll_wait返回,所以在某些的时候,还是不可避免的需要用epoll_ctl删除某个fd(或者设置EPOLLONESHOT),来显式的抑制epoll_wait的返回
【 在 Naory 的大作中提到: 】
: 这种都是代码上明显就能解决的问题。
: 我的意思是除了这种,有没有什么特别的考量,选某种会更好一点
:
--
FROM 123.168.94.*
这么多年过去了,Linux还没有新的网络IO模型嘛?
--
FROM 171.88.97.*
反正网卡都能跑满
你再改进软件,不也还是把网卡跑满么
【 在 poocp 的大作中提到: 】
: 这么多年过去了,Linux还没有新的网络IO模型嘛?
--
FROM 222.71.112.*
现在 AIO 要出来了,io_uring, 一个真正的异步 IO 模型,LINUX 下终于有了可以 IOCP 抗衡的网络模型。
【 在 Naory 的大作中提到: 】
: 用 epoll 的时候,所谓的「边缘触发」和「水平触发」。
: 我咋觉得这 2 个没有本质区别。
: 用哪个无所谓,捡自己顺手,不搞出 bug 的就行了?
--
修改:speedboy2998 FROM 218.76.62.*
FROM 218.76.62.*