我有几个小问题。
首先,多线程和多核之间有区别吗?它们是完全不同的东西还是多线程需要使用多个核心?
其次,大多数核心都有两个线程,但是在分析我的应用程序时,我注意到了许多不同的线程,范围从线程128到线程3460。是什么决定了计算机具有多少个线程?
谢谢
我有几个小问题。
首先,多线程和多核之间有区别吗?它们是完全不同的东西还是多线程需要使用多个核心?
其次,大多数核心都有两个线程,但是在分析我的应用程序时,我注意到了许多不同的线程,范围从线程128到线程3460。是什么决定了计算机具有多少个线程?
谢谢
首先,多线程和多核之间有什么区别吗?
有区别。
多线程和多核是应用于计算机不同领域的术语。
多核指拥有多个逻辑CPU内核并且可以在同一时间物理执行多个指令的计算机或处理器。一个计算机的“内核数量”是它所拥有的所有内核数:计算机可能有多个处理器,每个处理器可能有多个内核;内核数量是所有处理器上内核的总数。
多线程指能够利用多核计算机同时运行在多个内核上的程序。通常而言,两倍于核心数等于两倍于计算能力(对于支持多线程的程序),尽管某些问题受到除CPU使用率以外其他因素的限制;这些问题不会像多线程那样获得如此显著的增益。
需要注意的是,性能并非程序使用多个线程的唯一原因。稍后会详细介绍。
它们是两种完全不同的东西,还是多线程需要多个核心才能工作?
它们是相关但不同的概念。
支持多线程的程序可以利用多个可用的核心。
大多数内核有两个线程,但在分析我的应用程序时,我发现了许多不同的线程,从第128线程到第3460线程。
操作系统分配线程号码以便于跟踪它们。
大多数程序不需要同时运行3400个线程。另外,正在运行的线程将消耗一个核心的所有资源。你的CPU之所以不会一直运行到100%是因为操作系统知道如何暂停处理器,使其停止一切并等待某些事件发生(例如IO事件或时钟滴答声)。每次只能在一个核心上运行一个线程。实际上,不同的线程运行只是线程短时间跳转到CPU上运行,然后被其他需要运行的线程替换。
是什么决定了计算机有多少线程?
所有进程中的线程总数。此外,大多数操作系统还会施加硬性限制,即无法超过的最大现存线程数。
进程是一个程序(您可能已经知道了)。多线程是指每个进程有多个线程(许多进程不会使用多个线程,因为它们没有必要)。Windows没有线程数量的硬性限制,你可以创建的线程数受到可用内存的限制。
你说有些程序使用多个线程的原因并非出于性能考虑?
有时候即使不是同时进行,也可以同时进行多项任务。
有时候程序需要在特定的时间做特定的事情。一个常见的例子是带有可见窗口的程序。那个程序可能在进行强烈的后台数字计算,但如果它仍然可以响应用户事件,如点击按钮和调整大小,那么它会受益。这可以通过异步处理来实现,需要你的一个线程在间隔一段时间后反复检查GUI工作,暂停正在进行的工作,并处理GUI一段时间。许多东西都是这样做的。
处理这个问题的另一种可能更好的方式是使用线程。你的程序不必担心在数值计算和GUI管理之间来回切换,操作系统会为你管理它。即使你只有一个核心,你仍然可以运行多个线程,你的操作系统会尽力确保所有正在运行的进程中的所有运行线程都能公平获得CPU时间。
核心数和线程数是解耦的。你可以在单个核心上运行许多线程,也可能出现只有一个线程运行的情况,尽管我想不到这种情况会在现实生活中发生。可以说多核是硬件特性,而线程数是操作系统及其运行的进程领域内的内容。
当然,在单个核心上你不能同时运行多个线程。操作系统必须不断地在线程之间切换。