我正在使用pthreads
,并且正在尝试将线程休眠X秒。让线程进入睡眠状态(c pthreads)
我已经试过sleep()
,nanosleep()
,pthread_cond_timedwait()
(上假mutexlock等待X秒),pthread_yield()
,每个线程醒来时检查的时间,看它是否是它的时间来运行,最后只忙着等待X秒。
问题是,虽然所有这些方法在考虑结果时都能正常工作,但它们并没有给出我期望的性能结果。性能是衡量吞吐量(每秒回复),而不是及时。
在我的配置中,我运行了3个软件线程,其中有2个模拟物理内核(运行Ubuntu Server的VirtualBox)。我希望在将3个线程中的1个睡眠时可以获得更好的性能,因为其他2个线程有一个专用物理内核可以运行。然而,我得到了完全相反的行为(用我所有的方法):增加睡眠时间会导致更糟糕的表现。 (注意睡眠线程的工作量是130-300ms。)
难道是因为虚拟化(主机有4个核心)?难道是因为我使用的方法与我的方法使用pthread_yield
的方法类似吗?
sleep()
和nanosleep()
是如何实现的?他们使用信号吗?你认为使用信号处理器和alarm()
的实现会是更好的方法吗?当我拨打pthread_cond_wait()
会发生什么?它是如何实现的?
我也尝试使用chrt
更改调度策略,但没有运气。
为什么不使用互斥量或信号量?保持线程仅在需要的时间内睡眠 – Jarry
您能否给出示例代码以及实际性能数字(例如,来自'time'命令),以说明您的问题? –
你的线程表现有多少工作?你睡了多久?多久?不要忘记上下文切换咀嚼宝贵的CPU周期。 –