【发布时间】:2020-04-23 04:36:35
【问题描述】:
我想澄清一下我对多核环境中的内核线程和用户线程的理解。
如果 cpu 支持,只有内核创建的线程才能在 cpu 的不同内核上运行。用户级线程由库抽象在一个内核上,因此,所有用户级线程都运行在同一个内核上。
Python 线程一次只能运行一个,因为它们需要持有 GIL,因此无论 Python 线程的实现如何,在多核环境中一次只能使用 1 个内核。
在 nodejs 中有一个名为 eventloop 的主线程来处理所有的核心处理。所有与 io 相关的活动都被卸载到工作线程。但是现代计算机不使用 cpu 进行 io 活动,而是将 io 活动卸载到 io 控制器。所以所谓的工作线程实际上只是将 io 活动卸载到 io 控制器的抽象。没有创建真正的线程。
因此,python 和 nodejs 程序都不能真正在多核环境中一次使用多个内核。
我说对了吗?
【问题讨论】:
标签: python node.js multithreading kernel