在 Windows 中,如果一个事件在多个线程中注册,则 APIWaitForMultipleObjects
将在事件发生时仅唤醒一个线程。我现在必须移植一个在其线程池中使用它的应用程序,我正在寻找在 Linux 中执行此操作的最佳实践。
我知道epoll
哪个可以等待 fds(我可以用 来创建pipe
),但是在多个线程中等待一个 FD 可能会在只需要一个线程时唤醒每个线程。
在 Linux 上实现这种行为的最佳实践是什么?我真的不想拆分一个事件来拥有与工作线程一样多的 FD,因为这可能会在某些系统上达到 FD 限制,因为我有很多事件(所有事件都会被拆分)。
我的想法是创建 1 个主线程,将工作委托给可用的工作人员(或者如果所有工作人员都在工作,则将任务排队),但这意味着我有一个额外的上下文切换(并因此放弃计算时间)作为master 会醒来,然后唤醒另一个 worker。如果没有其他可能干净地实现这一点,我会这样做。不幸的是,我无法摆脱当前的架构,所以我需要解决这个问题。
是否有适用于此类问题的 API?