【问题标题】:prefer user thread rather than kernel thread [closed]更喜欢用户线程而不是内核线程[关闭]
【发布时间】:2016-03-06 15:58:08
【问题描述】:

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

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

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

一个例子: 我想从磁盘中读取一些文件并对这些文件中的每一个进行一些操作,选择哪个更好?

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

【问题讨论】:

  • 您的两个问题都非常模糊,我们无法判断您在问什么。您的意思是单核 CPU 优于多核 CPU,否则两个 CPU 可能完全不同?或者你的意思是在其他条件相同的情况下,我们更喜欢单核 CPU,而不是拥有更多内核的 CPU,每个内核都与单核相同?要不然是啥?在第二个问题中,您的意思是更喜欢安排它们吗?还是您的意思是更喜欢使用内核线程来实现某些东西?
  • 抱歉,我已经更正了。有没有好转? @大卫施瓦茨
  • 更喜欢什么理由?例如,为了成本效率,我们更喜欢单核而不是多核......
  • 我已经完成了我的问题,你能再看一遍吗? @SergeyA
  • “一些操作”是什么意思?您是指计算密集型操作吗?

标签: multithreading operating-system multicore


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

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

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

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

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

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

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

【讨论】:

  • 感谢您的好回答 :)
  • “您是否可以利用多核系统提供的额外处理能力在很大程度上取决于手头的特定任务以及可并行化的等级。”所以在我的例子中你提供多核系统?@DanielJour
  • 这取决于您如何处理文件中的数据。并行打开文件很好,但并不是真正的性能因素。
【解决方案2】:

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

只有在内核线程不可用时才能使用用户线程。

【讨论】:

  • 例如使用的绿色线程怎么样? “新手”语言,例如 Go 和成熟的语言,例如二郎?
猜你喜欢
  • 2011-08-06
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2022-08-15
  • 1970-01-01
  • 2016-03-24
  • 2012-01-10
相关资源
最近更新 更多