4

我编写了一个线程池,其中包含尽可能多的线程(备用内核),以避免上下文切换。每当需要执行一个新任务时,该任务就会被添加到一个无锁环形缓冲区中,以供线程池的线程使用。每次添加新任务时,我当前都会调用sem_post

我的基准测试表明,sem_post当有线程等待信号量时,调用需要 10 微秒。有些调用只需要 50 ns(这可能意味着完全在用户空间中可以确定没有线程可以被唤醒),但 350 +/- 30 纳秒也是一个常见的值。

这个问题是关于一个或多个线程无事可做并正在等待信号量的情况。

在那种情况下,调用者(试图唤醒一个新线程)在sem_post.

没有更快的方法(从调用者的角度来看)唤醒睡眠线程吗?我可以忍受 10 微秒的延迟,直到新线程最终开始运行,但是唤醒的线程不应该延迟太多。

我能找到的相关问题(但不回答我的问题)是

请注意,信号量似乎是在 futex 之上实现的。我认为 futex 是 Linux 上最快的方法吗?也许使用信号或中断更快?

4

0 回答 0