问:epoll 或者 kqueue 的原理是什么?为什么 epoll 和 kqueue 可以用基于事件的方式,单线程的实现并发?我没看过 linux 内核,对这方面一直有疑问…… 必须从很多基础的概念开始构建这个答案,并且可能引申到很多别的问题. 首先我们来定义流的概念,一个流可以是文件,socket,pipe 等等可以进行I/O操作的内核对象.不管是文件,还是套接字,还是管道,我们都可以把他们看作流. 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据:通过write,我们可以往…