在纯用户级线程策略中,为什么多线程应用程序可以利用多处理?

时间:2017-02-04 06:04:57

标签: multithreading operating-system multiprocessing

我的教科书陈述如下:

  

在纯ULT(用户级线程)策略中,多线程   应用程序无法利用多处理。内核分配   一次只能处理一个处理器的进程。因此,只有一个   进程中的线程可以一次执行。实际上,我们有   单个流程中的应用程序级多道程序设计。虽然这个   多道程序设计可以带来显着的加速   应用程序,有一些应用程序将受益于   能够同时执行部分代码。

我理解基本概念,例如用户级线程,多线程和多处理。但是,我不理解上述理由,因为多线程应用程序无法在纯ULT策略中利用多处理。

如果有人愿意花时间以更明确的解释澄清这一点,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

重要的事实是用户级线程(或绿色线程)由编程语言处理,不会暴露给操作系统。在ULT中,线程完全“隐藏在python运行时”中。这具有以下优点:编程处理环境具有对线程的完全控制。对于操作系统,程序看起来像一个线程,因此一次只能在一个核心上运行。

另一方面,内核线程由OS处理。他们可以一次在不同的核心上运行,并从这种速度提升中受益。缺点是“线程安全内存访问”之类的东西需要由线程本身处理,并且没有“外部语言调度程序”(如在用户级线程中),这可以保证线程安全。这就是为什么例如在python中有一个“全局解释器锁”,它保证两个内核线程永远不会同时运行。

这只是一个简短的总结。如果您有兴趣了解更多信息,请查看“全球翻译锁”(python,ruby)或see this answer