gpt4 book ai didi

python - 如果我们创建的线程数量超出 CPU 的承受能力会怎样?操作系统是否处理它? : Python - Threading

转载 作者:行者123 更新时间:2023-11-28 20:56:08 28 4
gpt4 key购买 nike

我的 CPU 数量是 8。这意味着理论上我可以有 16 个线程来运行我的多线程程序。我有几个问题。

  1. 如果我创建 20 个线程并同时启动它们会怎样?由于硬件限制,我不能拥有那么多线程,操作系统会处理它还是我必须从我这边处理它?<​​/li>
  2. 尽管理论上有 16 个线程,但某些线程可能已被其他程序使用。有没有办法在 Python 中获取“可利用线程数”并动态利用最大可能线程数?

最佳答案

My CPU count is 8.

您可能想检查这些是否是 logical CPUs or physical CPUs .

That means I can theoretically have 16 threads to run my multi-threaded program.

不,您可以拥有任意数量的线程(在合理范围内;如果您创建数千个线程,事情可能不会很顺利)。操作系统会根据需要将它们调度到物理(或逻辑)CPU 上。

What happens if I create 20 threads and start them at the same time? Since I cannot have that much of threads due to hardware limitations, does OS handle it or do I have to handle it from my side?

操作系统会处理它。然而,操作系统必须决定哪些线程将运行以及以何种顺序运行,而您可能不同意操作系统所做的选择,因此创建太多线程可能会适得其反。此外,线程之间的切换会带来固有的开销,因此如果您的工作受 CPU 限制,您通常不希望创建多于逻辑 CPU 的线程。

Even though there are 16 theoretical threads, some threads may be already utilized by other programs. Is there a way to get the "available to utilize thread count" in Python and dynamically utilize the maximum possible thread count?

这里我们遇到了问题:Python 有一个 global interpreter lock ,因此唯一正确的答案是“我可以有用地创建多少个线程?” (与“Python 和操作系统允许我创建多少个线程?”相反)是一个。如果您创建多个线程,则一次只有一个线程可以执行 Python 字节码。其他人将不得不等待锁定,并且将无法做任何有用的事情。

Python 线程的目的不是在多个 CPU 上工作。相反,它们用于多路复用 I/O。也就是说,您可以在任意多的线程上启动 I/O 操作(例如读取或写入文件、网络套接字、管道或其他 IPC 机制),并且所有这些 I/O 操作将并行运行. Python 在执行 I/O 操作时释放 GIL,因此它不会阻止这种并行性。如果您正在尝试编写某种服务器,这将很有用。在这个用例中,您可以为每个 I/O 操作创建一个线程(如果您不需要太多),或者创建一个线程池,该线程池动态地将工作项分配给工作线程,例如 concurrent.futures.ThreadPoolExecutor .

关于python - 如果我们创建的线程数量超出 CPU 的承受能力会怎样?操作系统是否处理它? : Python - Threading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55073803/

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