我使用轮询机制来管理多达100个连接。对于poll()调用的超时值应该是什么或如何确定它,是否有任何标准做法。
我的案例详情 -
我有一个调度程序线程监听所有连接。一旦连接变为就绪,我将其禁用以进行轮询,并将connfd转发到线程池处理读取。调度程序线程返回轮询。
线程池使用connfd上的读取并将其发送回调度程序,以便它可以添加它以进行下一次轮询。但调度程序将无法添加它进行轮询,直到它从poll()调用返回。我需要调度员定期检查是否需要为任何connfd重新启用轮询。
什么是良好的超时值,以便调度程序线程可以定期停止轮询并更新其pollfd列表。
答案 0 :(得分:0)
您不需要使用超时(只需将其设置为INF
)。
当需要显式定时器操作时,基本上会使用超时(某些异步IO库会为您处理此事件)。
要唤醒在民意调查中休眠的线程,请使用self-pipe trick。在Linux上,eventfd
也可以使用。
使用timerfd
(仅限Linux),超时可以完全废弃。