有几种线程模型可用于在应用程序中调度线程:
- 1:1(内核级线程):用户创建的每个线程都映射到内核中的一个调度线程。
- N:1(用户级线程):用户在单个应用程序中创建的所有线程实际上都映射到单个调度的内核线程。
- M:N(混合线程):用户在应用程序中创建的 M 个线程映射到 N 个内核线程。
用户级线程被认为比内核级线程更快,因为内核级的上下文切换比用户级更昂贵。用户级线程的一大缺点是它们不使用多处理器系统,因为它们只使用一个内核级线程。
有一些文章告诉 M:N 线程模型最好使用 N 作为 CPU 内核的数量(这里是一个例子)。通过这种方式,我们可以实现 1:1 和 N:1 线程模型的优势。
我的问题是:
- 当我们使用内核级线程时,我们还会在执行期间获得“额外”时间片(与用户级线程相反),所以它是否弥补了缓慢的上下文切换?
- 为什么 CPU 内核的数量在这里甚至是相关的?据我了解,这里的 CPU 内核数量是非常透明的,因为即使我们使用确切数量的内核线程,也无法保证它们确实是同时执行的,因为其他内核可以执行来自其他进程的其他线程,并且“我们的' 线程之后可能仍会使用上下文切换。因此,无论我们拥有多少 CPU 内核,他们都使用上下文切换。我在这里错了吗?