作者回复: 这是一个很重要的点,恭喜你悟到了 :)
作者回复: gdb都用上了,牛~
作者回复: 在后面的章节里对select、poll、epoll这几个技术进行了不同程度的比较,你可以接着往下读。
作者回复: 这里主要是因为播报员无法通读代码,所以把代码解说拿出来了。
作者回复: 你的程序要接着把它读完,否则就会没完没了的收到可读事件。
作者回复: 当然会,自动更新,动态检测,这就是NB的地方啊。
作者回复: 就喜欢你这样努力完成作业,实际写代码的样子。赞赞赞。
作者回复: 如果你读了后面答疑部分的源码就会明白,答案是否定的。如果你设置一个很小的events数组,会影响事件的时效性,也就是说,可能10秒前的一个I/O事件,现在你才收到,但是不会错过事件,其原因是事件总在内核中记录着。你不收,内核里也有;你收的快一点,时效性就越好,表现出对用户的体验就越好。
作者回复: LT和ET的区别在文稿里已经给出了。
我理解的惊群问题是当一个网络套接字上有事件发生时,多个线程或者进程会感知,从而引发一群线程干活。
我认为设计良好的程序应该避免这样的问题,比如一个套接字只被一个线程所管理。我们后面的框架设计也是遵循了这个原则。
作者回复: epoll_ctl的函数里吗可以用到,用来对已经注册的fd进行修正,比如改成既可读亦可写。
作者回复: 在代码解析那篇里,我详细分析了边缘触发和水平触发实现上的差异,通俗一点说,边缘触发就是通知你一下,解析来应用程序要自己处理,而水平触发则是你没有处理的话,一直不断的通知你处理。
作者回复: 从内核实现上能体现出来,你可以看下后面的源码解读部分。
作者回复: 应该是忘记关了 :)
作者回复: 需要删除掉,否则fd不能复用了。
作者回复: 第29讲里讲到了,答疑篇更是从源码角度深度剖析了,希望可以解答你的疑惑。
作者回复: 可以删除。
作者回复: 我没有试过,你可以试下哈。