2015-12-02 69 views
-3

我有两个问题,我不知道哪一个更好,什么时候?更喜欢用户线程而不是内核线程

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

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

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

  • 多核系统中使用内核级线程
  • 多核系统中使用用户级线程
  • 单核系统中使用用户级线程
  • 单核系统中使用内核级线程
+1

你的两个问题都很模糊,我们不能说出你在问什么。你是指多核CPU上的单核CPU,否则这两个CPU可能完全不同?或者你的意思是所有其他的都是平等的,我们更喜欢单核心CPU到一个CPU,每个CPU有更多核心,每个核心与单核心相同?或者是什么?而在第二个问题中,你是否更喜欢安排它们?或者你是否更喜欢使用内核线程来实现某些内容? –

+0

对不起,我已经纠正了它,它变得更好了吗? @DavidSchwartz – user4615534

+0

喜欢哪个理由?比如,为了节约成本,我们比较喜欢单核多核。 – SergeyA

回答

1
  1. 只要其他内核不会主动侵犯的任何不变(在单一内核上运行)的程序,那么就theoreticall没有理由选择单核多核。但实际上,应该考虑的事情有很多:

    • 缓存未命中,当程序调度到不同的内核时导致。只有核心拥有自己的缓存。而且,这在现代操作系统中可以防止。
    • 潜在的更多的中断处理:其它内核可以运行,导致代码它们发射inter-processor interrupts

    此外,有喜欢的成本和可用性显然非技术问题有待考虑。

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

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

    你给可能,而另一方面,需要使用的 内核级线程的例子:有什么阅读文件和其他互动节目之外通常涉及发卡系统调用。它们中的很多将会是阻塞系统调用,阻塞整个内核线程。这也意味着在该内核线程上运行的所有(如果有的话)用户级线程都将被阻塞。

    是否可以利用多核系统提供的额外处理能力高度依赖于具体的任务以及它可并行化的等级。

+0

感谢您的良好回答:) – user4615534

+0

“您是否可以利用多核系统提供的额外处理能力高度依赖于具体的任务,以及它可并行化的等级。”那么在我的示例中,您提供了多核系统?@DanielJour – user4615534

+0

这取决于您如何处理文件中的数据。并行打开文件很好,但不是真正的性能因素。 –

0

唯一一次我所能想象的(和它需要大量的想象力如此),其中一个用户线程将是最好的内核线程时,有一些独特的类型,你需要锁定问题确保只有一个线程正在执行。

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

+1

如何使用绿线诸如Go之类的“新人”语言和诸如例如Go等已建立的语言。二郎? –

相关问题