线程睡眠多长时间比较合适

blueboy82006 2011-08-18 09:33:34
在linux下多线程编程的时候,
比如经典的读者写者模式下,
当队列为空,读线程一般要 sleep一下,再来轮询队列吧。
这时sleep多少时间比较合适呢?
有没有比较专业的做法?

谢谢
...全文
1193 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
低头路过 2011-08-19
  • 打赏
  • 举报
回复
恩,我有看过楼上的帖子,另外在网上找了些资料,包括对linux和windows多线程的理解和解释,网址是
http://blog.csdn.net/dongguan131/article/details/6690474
理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列
nickowen 2011-08-19
  • 打赏
  • 举报
回复
linux sleep(0)根本没提高什么效率.
在内核中就是多进程的实现.
可以考虑用schedule()来控制调度
v_table 2011-08-19
  • 打赏
  • 举报
回复
sleep(0),让出当前时间片就好。。
flyck 2011-08-19
  • 打赏
  • 举报
回复
我来学习的。。。标记一下
blueboy82006 2011-08-19
  • 打赏
  • 举报
回复
感觉楼上很多人都在windows平台下讨论,而我问题是 linux平台多线程,这应该是不同的吧
blueboy82006 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yby4769250 的回复:]

如果读线程发现队列为空,直接sleep(0),sleep(0)会放弃读线程的时间片,读线程会被放回就绪队列,这个时候,操作系统会调度写线程来运行(假设你只有两个线程),写线程就能够有执行机会来往队列中填数据,当写线程的时间片用完,那么轮到读线程执行,这样,队列就不为空,sleep(0)高效,不会延时,如果你sleep(n),n>0,则导致读线程会在n秒之后才会参与CPU竞争,系统延时太厉害了
……
[/Quote]

这个在linux平台也适用??
ouen333 2011-08-19
  • 打赏
  • 举报
回复
23-4 是最好的.
PG 2011-08-19
  • 打赏
  • 举报
回复
我觉得你应该设置一个事件等待而不是实时查询。
yanran_hill 2011-08-19
  • 打赏
  • 举报
回复
那个,现在流行懒惰算法,所以如果队列为空,那除非是被强迫性唤醒,否则还是一直睡下去比较好
一叶之舟 2011-08-19
  • 打赏
  • 举报
回复
读的时候可以判断是否为空,如果为空休息时间长一些如1秒,如果不为这那就休息少了些如10毫秒为。至于具体数据多少毫秒或秒,要看你系统要求的实时性,有的一分钟也少,有的1秒也太多。
miracle222 2011-08-19
  • 打赏
  • 举报
回复
这个还是根据项目的具体情况,具体弄吧,应该没有 统一的方法。。。
iambic 2011-08-19
  • 打赏
  • 举报
回复
任务队列应该blocking的,用不着手动sleep。
skyworth98 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 peige2008 的回复:]

我觉得你应该设置一个事件等待而不是实时查询。
[/Quote]

sp............
QQ515311445 2011-08-19
  • 打赏
  • 举报
回复
没事就越久越好,有事看你自己了
yby4769250 2011-08-18
  • 打赏
  • 举报
回复
如果读线程发现队列为空,直接sleep(0),sleep(0)会放弃读线程的时间片,读线程会被放回就绪队列,这个时候,操作系统会调度写线程来运行(假设你只有两个线程),写线程就能够有执行机会来往队列中填数据,当写线程的时间片用完,那么轮到读线程执行,这样,队列就不为空,sleep(0)高效,不会延时,如果你sleep(n),n>0,则导致读线程会在n秒之后才会参与CPU竞争,系统延时太厉害了
参看我的一篇帖子

让线程sleep(0)
blueboy82006 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 babilife 的回复:]

看到过
sleep a random time : between 1 - 5 s
[/Quote]
1-5秒,这也太长了点吧?
我现在都是用nanosleep 控制睡100ms,不知道这样对线程调试有没有什么负面影响?
至善者善之敌 2011-08-18
  • 打赏
  • 举报
回复
看到过
sleep a random time : between 1 - 5 s

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧