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

时间:2015-12-02 12:01:36

标签: multithreading operating-system multicore

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

1.当所有内核彼此相同时,我们有时间更喜欢单核而不是多核吗?

2.当我们更喜欢使用内核线程时,我们更喜欢使用用户线程?我们是否有时间只使用用户线程?我的意思是当我们更喜欢使用内核级别和用户级别线程实现我们的程序时?

一个例子: 我想从磁盘读取一些文件并对每个文件执行一些操作,最好选择哪一个?

  • 使用内核级线程的多核系统
  • 使用用户级线程的多核系统
  • 使用用户级线程的单核系统
  • 使用内核级线程的单核系统

2 个答案:

答案 0 :(得分:1)

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

    • 当程序被安排到不同的核心时导致的缓存未命中。只有核心有自己的缓存。此外,这可以在现代操作系统中防止。
    • 可能需要处理更多中断:其他核心可能正在运行导致它们发出的代码inter-processor interrupts

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

  2. 通常,用户级线程似乎比内核级线程更有效。因此对于例如并行计算我推荐用户级线程。

      

    我想从磁盘读取一些文件,并对每个文件进行一些操作,最好选择哪一个?

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

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

答案 1 :(得分:0)

我唯一可以想象的(并且需要很多想象)用户线程比内核线程更优秀的是当存在一些独特类型的锁定问题时,您需要确保只有一个线程正在执行。

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