有关epoll的具体应用问题

服务端采用epoll ET模式,当有请求过来,epoll_wait会告知有数据可读,因此进行

读操作(ET下,这里是一次性读完吗?,如果读取数据很大,那岂不是效率低了?),

同时进行数据处理; 我不明白的是,应该在什么地方关注该fd的写事件---即哪里写

epoll_ctl(epfd, EPOLL_OUT, fd, events) ?

epoll的事件触发,EPOLL_IN比较懂,有数据传入,epoll_wait告知; 那EPOLL_OUT呢,我明白在发送缓冲区可写时,会触发EPOLL_OUT,但是这怎么跟服务器的设计联系起来呢?

3个回答

epoll_wait每次只对就绪队列(rdlist)进行检查,如果发现就绪队列(rdlist)不为空,将当前进城设置为就绪,下来将rdlist里的fd挪到另一个队列里(txlist),rdlist清空,将txlist里的fd拷贝到用户空间。对于lt模式来说,有fd事件没有处理完,就将txlist相应的fd写回到rdlist里以便下次还能从rdlist里发现它。

ET模式下只通知用户一次,用户必须一次性读完数据,而且ET模式必须采用非阻塞读或写。如果处理事件逻辑比较复杂,建议起个线程去处。你想要关注某个fd的事件,不论读或写,提前将它们加入内核时间表就行了,等有该fd上的这类事件发生时,就会通知用户。具体设计视情况而定。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐