作者回复: gdb都用上了,牛~
作者回复: 这是一个很重要的点,恭喜你悟到了 :)
作者回复: 这里主要是因为播报员无法通读代码,所以把代码解说拿出来了。
作者回复: 你的程序要接着把它读完,否则就会没完没了的收到可读事件。
作者回复: 在后面的章节里对select、poll、epoll这几个技术进行了不同程度的比较,你可以接着往下读。
作者回复: LT和ET的区别在文稿里已经给出了。
我理解的惊群问题是当一个网络套接字上有事件发生时,多个线程或者进程会感知,从而引发一群线程干活。
我认为设计良好的程序应该避免这样的问题,比如一个套接字只被一个线程所管理。我们后面的框架设计也是遵循了这个原则。
作者回复: 从内核实现上能体现出来,你可以看下后面的源码解读部分。
作者回复: 应该是忘记关了 :)
作者回复: 需要删除掉,否则fd不能复用了。
作者回复: 当然会,自动更新,动态检测,这就是NB的地方啊。
作者回复: 就喜欢你这样努力完成作业,实际写代码的样子。赞赞赞。
作者回复: 如果你读了后面答疑部分的源码就会明白,答案是否定的。如果你设置一个很小的events数组,会影响事件的时效性,也就是说,可能10秒前的一个I/O事件,现在你才收到,但是不会错过事件,其原因是事件总在内核中记录着。你不收,内核里也有;你收的快一点,时效性就越好,表现出对用户的体验就越好。
作者回复: 第29讲里讲到了,答疑篇更是从源码角度深度剖析了,希望可以解答你的疑惑。
作者回复: 可以删除。
作者回复: 我没有试过,你可以试下哈。
作者回复: 因为这部分数据没有被处理掉,而这个正是条件触发的精髓。
至于描述字,我是这么理解的,0,1,2分别被stdin, stdout和stderr所用,3被监听套接字所用,本地连接的客户端描述字是4,那么本地已连接套接字就是5了。
作者回复: 这里是笔误,应该是epoll_create1的输入参数flags如为0,则和epoll_create()一样。
已经让编辑勘误了,感谢指出。