如果我们创建的线程超过CPU的能力,会发生什么?操作系统能处理吗Python线程
我的CPU数是8。这意味着理论上我可以有16个线程来运行我的多线程程序。我有几个问题如果我们创建的线程超过CPU的能力,会发生什么?操作系统能处理吗Python线程,python,python-3.x,multithreading,Python,Python 3.x,Multithreading,我的CPU数是8。这意味着理论上我可以有16个线程来运行我的多线程程序。我有几个问题 如果我创建20个线程并同时启动它们会发生什么?由于硬件的限制,我不能拥有那么多的线程,那么操作系统是处理它呢,还是我必须从自己的角度来处理它呢 即使有16个理论线程,一些线程可能已经被其他程序使用。有没有办法在Python中获得“可利用线程数”并动态利用最大可能的线程数 您混合了硬件端超线程和软件端线程。第一个基本上模拟了比您拥有的更多的CPU内核。但它与我们在软件编程中所称的线程无关 线程(软件线程)不像计算
您混合了硬件端超线程和软件端线程。第一个基本上模拟了比您拥有的更多的CPU内核。但它与我们在软件编程中所称的线程无关 线程(软件线程)不像计算机拥有的资源,也不像可以分配给进程的资源。线程与进程类似,但它们共享其父进程的地址空间。所以他们可以访问相同的变量——不同的进程通常无法访问 因此,您可以打开文本编辑器20次,也可以打开新线程20次。然而,因为你可以,并不意味着你应该: 进一步阅读:
编辑:添加到s的答案:仍然有理由使用多个线程(例如,如果您同时访问软件并绘制UI),GIL没有从中获得有用性。或用于呈现非阻塞UI覆盖。线程仍然以并行方式执行,尽管在一个cpython进程中没有两个atomar命令同时执行。 (顺便说一句,这不是评论,因为我还没有足够的声誉在别人的帖子下发表评论) 我的CPU数是8 您可能需要检查这些是否正确 这意味着理论上我可以有16个线程来运行我的多线程程序 不,您可以有任意多个线程(在合理范围内;如果您创建了数千个线程,事情可能会不太顺利)。操作系统将根据需要将它们调度到物理(或逻辑)CPU上 如果我创建20个线程并同时启动它们会发生什么?由于硬件的限制,我不能拥有那么多的线程,那么操作系统是处理它呢,还是我必须从自己的角度来处理它呢 操作系统处理它。但是,操作系统必须决定哪些线程将运行以及以何种顺序运行,并且您可能不同意操作系统所做的选择,因此创建太多线程可能会适得其反。此外,在线程之间切换会带来固有的开销,因此如果您的工作受到CPU的限制,您通常不希望创建的线程超过逻辑CPU的数量 即使有16个理论线程,一些线程可能已经被其他程序使用。有没有办法在Python中获得“可利用线程数”并动态利用最大可能的线程数 这里我们遇到了一个问题:Python有一个线程,所以“我可以有效地创建多少线程?”(与“Python和操作系统允许我创建多少线程?”)的唯一正确答案是1。如果创建多个线程,一次只能有一个线程执行Python字节码。其他人将不得不等待锁,并且将无法执行任何有用的操作
Python线程的目的不是在多个CPU上工作。相反,它们用于多路复用I/O。也就是说,您可以在任意多个线程上启动I/O操作(如读取或写入文件、网络套接字、管道或其他IPC机制),所有这些I/O操作都将并行运行。Python在执行I/O操作时会释放GIL,因此它不会阻止这种并行性。如果您试图编写某种类型的服务器,这将非常有用。在这个用例中,您可以为每个I/O操作创建一个线程(如果您不需要太多的话),或者创建一个线程池,动态地将工作项分配给工作线程,例如。Hi@Kevin,我使用了“os.cpu\u count()”。它提供了逻辑CPU或物理CPU的数量吗?@PradeepSanjeewa:基于我相信“正确”的答案是逻辑CPU,但显然是在Windows上。