Python 3.x 在GIL下的双核机器上产生两个线程的一个进程

Python 3.x 在GIL下的双核机器上产生两个线程的一个进程,python-3.x,multithreading,cpu,Python 3.x,Multithreading,Cpu,假设我有一个进程,它在一台双核机器上生成两个线程 因为吉尔 线程1是否可能绑定到Core1,而线程2则绑定到Core2,因此它们正在等待在不同的CPU上获得锁 或者所有线程不断绑定到特定的CPU(即使100个线程在100核机器上生成) 默认情况下,线程不绑定到任何CPU——当线程准备好运行时,操作系统将使用操作系统选择的算法动态地将其分派到可用的内核上运行 然而,由于GIL是全局的,在给定的Python进程中,在任何给定的时间只有一个线程可以执行Python字节码。该进程中的任何其他线程在等待获

假设我有一个进程,它在一台双核机器上生成两个线程

因为吉尔

线程1是否可能绑定到Core1,而线程2则绑定到Core2,因此它们正在等待在不同的CPU上获得锁


或者所有线程不断绑定到特定的CPU(即使100个线程在100核机器上生成)

默认情况下,线程不绑定到任何CPU——当线程准备好运行时,操作系统将使用操作系统选择的算法动态地将其分派到可用的内核上运行


然而,由于GIL是全局的,在给定的Python进程中,在任何给定的时间只有一个线程可以执行Python字节码。该进程中的任何其他线程在等待获取GIL时都会被阻塞,因此根本不会与任何内核相关联。

因此,线程可以在与线程生成的进程不同的内核上运行。最好将进程视为一个或多个线程共享访问的内存空间。在该内存空间中,您有“主线程”(进程启动时由Python解释器为您启动)和代码显式启动的任何其他线程。在内核调度方面,主线程和附加线程之间没有区别。太多了,我等了一会儿,今天晚上接受了答案。