gpt4 book ai didi

multithreading - Bash有线程产量吗?

转载 作者:行者123 更新时间:2023-12-03 13:19:38 25 4
gpt4 key购买 nike

线程产量向OS表示该进程暂时不会需要CPU,并且调度程序应抢先切换到另一个进程。例如,在C++ 11中,调用为std::this_thread::yield()

Bash有这样的命令吗?如果是这样,那是什么?

最佳答案

良率并不是要向系统提供有关进程/线程预期的建议。操作系统不需要此类帮助,因为它可以在任何给定时间查看该进程实际需要什么。相反,屈服大约是一个线程主动地给其他线程运行的机会,即使该线程确实有更多的工作要执行。即使没有此类帮助,调度程序也非常擅长分配CPU资源。

在任何情况下,bash都没有这种东西,您可以通过阅读手册的list of internal commands及其list of built-ins进行检查。

但是,人们似乎确实对bash本身(或任何其他shell)与它可以为您运行的外部命令感到困惑。外部命令绝不是Shell的一部分,而是一些Shell编程的备用命令(首先想到的是grepawksed)。您可以获得或编写的任何程序都可以通过bash运行。特别是,您可以为该工作构建此C程序:

#include <sched.h>
int main() {
sched_yield();
return 0;
}

如果从 shell 启动它,那么在父 shell 等待它完成时,它的确会产生CPU。 Shell本身不会屈服,但是由于它将在 child 的完成时被阻止,因此效果仍然是主动允许其他进程运行。但是所涉及的开销令人难以置信!

最后,@ CharlesDuffy的评论非常简洁地列出了这种情况:

bash code that's reasonably written will be spending its time blocking (waiting either on IO [or] for subprocesses to exit), either of which yields the CPU implicitly.



如果您的 bash脚本似乎真正用于显式的 yield,则您做错了什么。

关于multithreading - Bash有线程产量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30405121/

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