我正在使用pthreads
并试图让线程休眠 X 秒。
我试过sleep()
,,nanosleep()
(pthread_cond_timedwait()
等待一个假的互斥锁 X 秒),,pthread_yield()
每次线程唤醒时检查时间,看看是否该运行,最后只是忙等待 X 秒。
问题是,尽管考虑到结果,所有这些方法都可以正常工作,但它们并没有给出我期望的性能结果。性能以吞吐量(每秒回复)而不是时间来衡量。
在我的配置中,我在 2 个模拟物理内核(运行 Ubuntu Server 的 VirtualBox)上运行 3 个软件线程。当让 3 个线程中的 1 个进入睡眠状态时,我希望获得更好的性能,因为其他 2 个线程有一个专用的物理内核可以运行。然而,我得到了完全相反的行为(我所有的方法):增加睡眠时间会降低性能。(注意,休眠线程的工作负载为 130-300ms。)
可能是因为虚拟化(主机有 4 个核心)?可能是因为我使用的方法与我使用的方法类似pthread_yield
吗?
是如何实施sleep()
的nanosleep()
?他们使用信号吗?您认为使用信号处理程序的实现alarm()
会是更好的方法吗?当我打电话时会发生什么pthread_cond_wait()
?它是如何实施的?
我也尝试过使用chrt
来更改调度策略,但没有运气。