在阅读了很多相关材料之后,我仍然对ULT和KLT感到困惑。 内核如何处理两个相同进程的ULT?同一进程的两个用户级线程可以在多核CPU上同时运行吗?如果是,是由内核还是库函数完成的?
答案 0 :(得分:0)
同一进程的两个用户级线程可以在多核CPU上同时运行吗?
是的,使用线程的主要原因之一是通过在独立计算上同时工作来提高性能。
如果是,是由内核还是库函数完成的?
内核负责管理硬件提供的资源,包括多核CPU中的多个核心。内核提供了一个由用户空间库使用的编程接口(系统调用),后者又为用户应用程序提供了一个接口(抽象层)。有许多用于管理线程的库和编程语言扩展,这是一个很好的概述
https://software.intel.com/en-us/articles/choosing-the-right-threading-framework
简而言之,内核最终是创建线程,计划运行,上下文切换,等待事件和销毁的地方。多线程用户程序使用库函数和/或语言扩展来管理线程,这些线程在内核之上提供不同的抽象级别。
答案 1 :(得分:0)
自Linux 2.6版以来,标准实现是NPTL (本地Posix线程库)将 1用户级线程分配给 1内核线程(实际上是Linux"知道"只是任务 - 不处理任何线程 - 大约8kb的内核内存。)
如果是多处理器/核心机器(内核代码中定义了 CONFIG_SMP ),可以在任何可用处理器上分配一个线程(在Linux中,任何处理器都有"运行-queue" - 红黑树数据结构 - 包含准备运行的任务列表)。 "迁移"两个运行队列之间的任务是可能的。
我希望这有助于澄清!
_ _
卡斯帕。