linux线程,主要睡眠

时间:2017-10-12 09:29:43

标签: linux multithreading loops sleep main

我的程序有很多线程,主循环没有任何功能。我曾经将主循环编码为while(1){sleep(1);}。

我现在问自己,但不能确定性能方面是否为空主循环(而(1){})优于睡眠(1)或反之亦然,或相同???

我认为调度程序会检查每个调度周期中的每个任务,看看是否需要唤醒它们,这样做:

  • 当main为空时while循环:唤醒什么都不做

  • 当主要是睡眠循环时:检查/重新计算唤醒时间戳,如果需要被唤醒,则唤醒什么都不做

有什么不同吗?

3 个答案:

答案 0 :(得分:2)

there is much difference. sleep(1) version is much better than empty while(1){}.

sleep(1) let system kernel check time , when the time alarm reach ,it will run next step. So it just cost a little resource.

but the while(1){} is different, it will run the statement "while(1)" all the time, it will cost a lot of CPU resource(all the resource it can get).

you can use top command to check resource usage, you will find sleep(1) version use only a little resource while "while(1){}" use 100% CPU (of a Cpu core/thread)

答案 1 :(得分:1)

When you use threading, the best option would probably be to have no loop in the main thread but the join operation, which waits for the other threads to finish.

答案 2 :(得分:0)

我错了关于空的while循环,它将所有剩余的CPU作为peter__barnes提到。我的真实程序在main()中有这个:while(someCondition){//空循环}。 someCondition()里面有一些信号等待。我只是考虑将main()中的空循环与main()中的while(1){sleep(1);}中的其他程序进行比较。但它不是一个空循环开始。所以我的问题是错的,但无论如何,它向我展示了我以前不知道的事情以及后续问题:

如果我的程序是一个永远不会退出的守护进程,那么main()中的pause()或join()会更好吗?