关于Linux纳米睡眠和过程的理论问题

时间:2015-09-22 20:31:43

标签: linux

我有两个与C系统Linux编程相关的理论问题,涉及纳米睡眠和过程破坏。

所以,第一个:

只需使用nanosleep即可实现97%的CPU负载。例如,让我们考虑在子进程上以1秒的延迟迭代50次的for循环。使用nanosleep获得延迟。我在Debian Linux的开发板上观察到的是,在15到20次迭代之后,纳米级别的块和CPU负载是90%(我使用top来查看值)。

第二个问题与第一个问题有某种关系。使用相同的代码, 在子进程上运行50次for循环我观察到当纳秒睡眠在90%CPU负载下阻塞(冻结)时,子进程变成了僵尸进程。 它是一种内核机制,试图杀死使用过多CPU的进程?

再次,抱歉我无法发布代码,它不是我的...但我发现这两个案例的古玩,我在互联网上找不到什么,或者我没有& #39;不知道如何搜索。我只是想知道,理论上如果只使用nanosleep可以有90%的CPU负载,其次如果内核有一个安全机制试图杀死使用过多CPU的进程。

我有兴趣找到关于这种情况的一些意见,也许是推荐的替代功能。

PS:我不想看到要求源代码的评论,因为这个问题只是理论上的。

2 个答案:

答案 0 :(得分:1)

你的问题毫无意义(抱歉)。

  1. 如果nanosleep阻塞,它将不会使用任何CPU,因为它会阻塞,即在内核中等待其他事情发生。这就是阻止意味着什么。

  2. 对于使用100%CPU的进程,它必须忙着等待。

  3. 如果它正在忙着等待,并且正在呼叫nanosleep,我们可以得出结论,每次拨打nanosleep的时间都非常短。

  4. 另一种解释是它使用大量的CPU做其他事情,只是非常偶尔调用nanosleep,或者运行多个线程,而不是调用{ {1}}正在使用大量CPU。

答案 1 :(得分:1)

我不是专家,但我认为如果你的内核杀死了这个过程导致它消耗了太多的资源,它将完全取决于你正在使用的发行版。

关于CPU的使用,理论上你可以不断地将进程引入CPU并让它们进入睡眠状态。在这种情况下,操作系统将调度进程从CPU到锁定队列和返回(开销),并根据您的发行版用于调度进程的排队类型(循环,老化队列等,我记不起吧现在你可以设置这个参数)它最终可能会饿死其他进程

无论如何,这不仅仅是与操作系统相关的C问题