我的教科书陈述如下:
在纯ULT(用户级线程)策略中,多线程 应用程序无法利用多处理。内核分配 一次只能处理一个处理器的进程。因此,只有一个 进程中的线程可以一次执行。实际上,我们有 单个流程中的应用程序级多道程序设计。虽然这个 多道程序设计可以带来显着的加速 应用程序,有一些应用程序将受益于 能够同时执行部分代码。
我理解基本概念,例如用户级线程,多线程和多处理。但是,我不理解上述理由,因为多线程应用程序无法在纯ULT策略中利用多处理。
如果有人愿意花时间以更明确的解释澄清这一点,我将不胜感激。
答案 0 :(得分:1)
重要的事实是用户级线程(或绿色线程)由编程语言处理,不会暴露给操作系统。在ULT中,线程完全“隐藏在python运行时”中。这具有以下优点:编程处理环境具有对线程的完全控制。对于操作系统,程序看起来像一个线程,因此一次只能在一个核心上运行。
另一方面,内核线程由OS处理。他们可以一次在不同的核心上运行,并从这种速度提升中受益。缺点是“线程安全内存访问”之类的东西需要由线程本身处理,并且没有“外部语言调度程序”(如在用户级线程中),这可以保证线程安全。这就是为什么例如在python中有一个“全局解释器锁”,它保证两个内核线程永远不会同时运行。
这只是一个简短的总结。如果您有兴趣了解更多信息,请查看“全球翻译锁”(python,ruby)或see this answer