gpt4 book ai didi

linux - 有关 Linux nanosleep 和进程的理论问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:34 35 4
gpt4 key购买 nike

我有 2 个与 C 语言 Linux 系统编程相关的理论问题,关于 nanosleep 和进程破坏。

所以,第一个:

仅使用nanosleep就可以使CPU负载达到97%。例如,让我们考虑一个在子进程上迭代 50 次且延迟 1 秒的 for 循环。延迟是使用 nanosleep 获得的。我在 Debian Linux 的开发板上观察到,经过 15 到 20 次迭代后,nanosleep 会阻塞,CPU 负载为 90%(我使用 top 来查看该值)。

第二个问题与第一个问题有某种关联。使用相同的代码,在子进程上运行 50 次的 for 循环我观察到,当 nanosleep 在 90% CPU 负载时​​阻塞(卡住)时,子进程会变成僵尸进程。这是一种内核机制,试图杀死使用过多 CPU 的进程?

再次抱歉,我无法发布代码,它不是我的...但是我发现了这两个案例,但我在互联网上没有找到相关内容,或者我不知道如何搜索。我只是想知道,理论上是否可以仅使用 nanosleep 获得 90% 的 CPU 负载,其次内核是否有一个安全机制来尝试杀死使用过多 CPU 的进程。

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

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

最佳答案

我不是专家,但我认为如果您的内核由于消耗太多资源而终止进程,则它将完全取决于您正在使用的发行版。

关于CPU的使用,理论上你可以不断地让进程进入CPU并让它们休眠。在这种情况下,操作系统会将进程从 CPU 分派(dispatch)到锁定队列并返回(开销),并且根据您的发行版用于分派(dispatch)进程的排队类型(循环、老化队列等,我现在不记得在哪里可以设置此参数),它最终可能会导致其他进程挨饿

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

关于linux - 有关 Linux nanosleep 和进程的理论问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32726314/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com