更喜欢用户线程而不是内核线程

prefer user thread rather than kernel thread

我有两个问题,我不知道哪个更好,什么时候更好?

1.do我们有没有更喜欢单核而不是多核的时候?当所有的核心彼此相同时?

2.when我们更喜欢使用内核线程,什么时候更喜欢使用用户线程?我们有什么时候更喜欢只使用用户线程吗?我的意思是什么时候我们更喜欢使用内核级和用户级线程来实现我们的程序?

一个例子: 我想从磁盘中读取一些文件,对每个文件做一些操作,选择哪个比较好?

  1. 只要其他核心不主动违反(在单核上运行)程序的任何不变量,那么理论上没有理由选择单核而不是多核.但实际上,有很多事情应该考虑:

    • 缓存未命中,当程序被调度到不同的内核时造成的。仅当内核有自己的缓存时。此外,这在现代操作系统中是可以避免的。
    • 可能需要处理更多中断:其他内核可能是 运行 导致它们发出 inter-processor interrupts
    • 的代码

    此外,显然还有成本和可用性等非技术问题需要考虑。

  2. 一般来说,用户级线程似乎比内核级线程更高效。所以例如并行计算我推荐用户级线程。

    I want to read some files from disk and do some operation on each of these files, which one is better to choose?

    另一方面,您给出的示例可能需要使用 内核级线程:读取文件和与程序外部的任何其他交互通常涉及发出系统调用。其中许多将 阻塞 系统调用,阻塞整个内核线程。这也意味着该内核线程上的所有(如果有的话)用户级线程 运行 将被阻塞。

    您能否利用多核系统提供的额外处理能力在很大程度上取决于手头的具体任务以及它的并行化程度。

我唯一能想到(这需要很多想象力)用户线程比内核线程更可取的情况是存在某种独特类型的锁定问题,您只需要确保一个线程正在执行。

唯一出于实际目的使用用户线程的时间是当内核线程不可用时。