多线程和多核的差异

我有几个小问题。

首先是多线程和多核心之间的区别? 它们是完全不同的东西,还是多线程使用多个核心?

其次,大多数内核有两个线程,但是在分析我的应用程序时,我注意到从128线程到3460线程的许多不同的线程。什么决定了您的计算机有多少个线程?

谢谢


首先是多线程和多核心之间的区别?

是。

多线程和多核是适用于不同计算领域的不同术语。

  • 多核是指具有多个逻辑CPU内核的计算机或处理器,并且可以同时在物理上执行多条指令。 计算机的“核心计数”是计算机具有的核心总数:计算机可能有多个处理器,每个处理器可能有多个核心; 核心数是所有处理器上的核心总数。

  • 多线程是指一个程序,可以同时在多个核心上运行,从而利用多核计算机。 通常情况下,内核数量是计算能力的两倍(对于支持多线程的程序),尽管一些问题受CPU使用率以外的因素限制; 这些问题不会从多线程中获得如此显着的收益。

    需要注意的是,性能不是程序使用多线程的唯一原因。 稍后更多。

  • 它们是完全不同的东西,还是多线程使用多个核心?

    他们是相关的,但分开。

    如果有多个可用的程序,支持多线程的程序可以使用多个核心。

    大多数内核有两个线程,但在分析我的应用程序时,我注意到从128线程到3460线程的很多不同的线程。

    操作系统分配线程号码,以便跟踪它们。

    你将运行的大多数程序不需要一次运行3400个线程。 另外,一个正在运行的线程将占用一个核心。 CPU始终以100%运行的唯一原因是操作系统知道如何挂起处理器,这基本上使得它停止一切并等待事件发生(例如IO事件或时钟节拍)。 一次只能有一个线程在核心上运行。 不同的线程运行实际上只是跳到CPU并短时间运行的线程,然后与其他需要运行的线程交换。

    什么决定你的电脑有多少个线程?

    所有进程中的线程总数。 而且,大多数操作系统都会施加一个硬限制,即不能超越的最大数量的现有线程。

    一个过程是一个程序(你可能知道这一点)。 多线程是每个进程拥有多个线程的过程(许多进程不会创建多个线程,因为他们不需要)。 Windows对你可以创建的线程数量没有硬性的限制(至少从XP以来就没有这么做了,不会说w98和之前的任何内容),但是你可以创建的线程数量受限于内存的数量你有。

    你说某些程序使用多个线程的原因除了性能。

    有时候,即使不是同时进行多任务也是很好的。

    有时候程序需要在特定的时间做特定的事情。 一个常见的例子是一个带有可见窗口的程序。 该程序可能正在进行强烈的后台数字处理,但如果它仍然可以响应用户事件(如单击按钮并调整其大小),将会使其受益。 这可以通过异步处理来完成,这需要您的一个线程重复检查GUI的工作,以便间歇地执行,暂停它正在执行的操作以及处理GUI一段时间。 很多事情都是这样做的。

    另一种可能更好的方法是使用线程。 您的程序不必担心在数字运算和GUI管理之间来回切换,操作系统将为您管理。 即使您只有一个内核,仍然可以运行多个线程,并且您的操作系统将尽最大努力确保所有正在运行的进程中的所有正在运行的线程获得它们公平的CPU时间份额。


    内核数量和线程数量是解耦的。 您可以在单个内核上运行多个线程,并且尽管存在更多内核,但您仍可以在只有一个线程的情况下运行(尽管我无法想象会发生这种情况的真实场景)。 比方说,多核是硬件特性,而线程的数量是操作系统领域和运行在其上的进程的东西。

    当然,使用单核时,不能有多个线程同时运行。 OS必须不断地在线程之间来回切换。


    在单个内核上线程通常意味着你可以创建x个线程,并且每个线程都会被给定一定的运行时间(线程量)。 当线程被切换时,这被称为上下文切换,所有这些都需要一些时间,所以需要做一些基准测试来找到理想的每个内核线程数。

    如果大多数工作都受到CPU限制,那么产生数百个线程的意义不大,因为这不太可能提高性能(实际上可能会使情况变得更糟,记住上下文切换不是免费的)。 但是,对于I / O绑定的工作,这可能会有所帮助,因为在系统忙于完成这项工作时,可以为另一个线程提供cpu时间。

    拥有物理附加内核意味着两件事情可以在硬件层面上真正并行运行。

    链接地址: http://www.djcxy.com/p/13923.html

    上一篇: Multithreading and multicore differences

    下一篇: Is there a difference between concurrency and parallelism in java?