多线程如何利用多个内核?

     2023-02-16     277

关键词:

【中文标题】多线程如何利用多个内核?【英文标题】:How does multithreading utilizes multiple cores? 【发布时间】:2020-12-14 18:59:53 【问题描述】:

所以最近我学习了一些关于多线程的基础知识。我的理解是,线程是一个轻量级的进程,通过共享内存在进程下运行,而一个进程在一个CPU核下运行。

但从这个角度来看,我无法理解一些说线程利用多个内核并使整个程序执行更有效的说法。据我所知,一个进程创建的线程应该只在该特定进程下运行,这意味着它应该只在那个 CPU 内核下运行。如果我们想利用多核,我们实际上应该使用多进程来并行运行。我研究的大部分内容只是关于结论,即多线程利用多个内核,但没有一个能解释我的问题。我是不是觉得有什么不对?谢谢!

【问题讨论】:

【参考方案1】:

你的困惑就在这里:

[...] 一个进程在一个 CPU 内核下运行。

[...] 由一个进程创建的线程应该只在该特定进程下运行,这意味着它应该只在那个 CPU 内核下运行。

这不是真的。我认为您阅读的各种解释意味着任何进程都有至少一个线程(其中“线程”是由 CPU 内核运行的一系列指令)。

如果您有一个多线程程序,该进程将有多个线程(由一个 CPU 内核运行的指令序列),可以在不同的 CPU 内核上同时运行。

在任何给定时间,您的计算机上都会执行许多进程。操作系统 (OS) 是为所有这些进程分配硬件资源(CPU 内核)并决定在另一个进程使用 CPU 之前哪个进程可以使用哪些内核持续多长时间的程序。一个进程是否可以使用多个内核并不完全取决于该进程。更令人困惑的是,多线程程序可以使用比计算机 CPU 上的内核更多的线程。在这种情况下,您可以确定所有线程不会并行运行。

还有一件事:

[...] 线程利用多核,使整个程序执行更有效

我会听起来很迂腐,但比这更复杂。这取决于您所说的“有效”。我们是在谈论总计算时间、能耗..?

顺序(1 个线程)程序在功耗方面可能非常有效,但需要很长时间来计算。如果您能够使用多个线程,则可以减少计算时间,但可能会产生新的成本(线程之间的同步、针对并发访问的额外保护机制......)。

此外,多线程对于 CPU 领域之外的某些任务也无济于事。例如,除非您有一些非常具体的硬件支持,否则使用 2 个或更多并发线程从硬盘驱动器读取文件无法有效地并行化。

【讨论】:

首先感谢您的解释!然而,我仍然感到困惑:如果您有一个多线程程序,该进程将有多个线程(由 CPU 内核运行的指令序列),它们可以在不同的 CPU 内核上同时运行。 这句话是否意味着一个进程能够在与该进程不同的另一个内核上分配一个线程?根据您的回答,我认为这是由于操作系统决定进程能够访问哪个内核的原因。我说的对吗? 是的。当您的进程的第一个线程“分配”一个新线程时,它正在做的是向操作系统询问计算资源。现在操作系统被告知您的进程需要一个额外的线程,它可以为该进程分配一个新线程。

如何在 Matlab 中最大限度地利用多线程 CPU?

】如何在Matlab中最大限度地利用多线程CPU?【英文标题】:HowcanIutilizemultithreadCPUmostinMatlab?【发布时间】:2013-09-2404:49:51【问题描述】:我刚买了Matlab并行计算工具箱。命令matlabpoolopen使用我的CPU中的内核数打开并行工作器。但... 查看详情

单核cpu如何执行多线程

概述在多处理器系统中,多个线程在不同的内核上同时执行。例如,如果有两个线程和两个内核,则每个线程将在单个内核上运行。在单处理器系统中,多个线程执行一个接一个的执行,或者等到一个线程完... 查看详情

3.如何理解开多线程可以充分利用cpu?

 如何理解开多线程可以充分利用CPU?  <1>操作系统采用时间片轮转调度算法分配的时间片给每个进程中的线程  <2>操作系统的时间片轮转调度算法分配的时间片在别的进程中都没有准备好(比如在访问网络)的时候,... 查看详情

python并发编程基础

...源,提高程序的运行效率。  2.实现方案:多进程,多线程  3.并行与并发    并发:同时处理多个任务,内核在任务间不断的切换达到好像多个任务被同时执行的效果,实际每个时刻只有一个任务占有内核。    ... 查看详情

python并发编程—进程

...核资源,提高程序的运行效率。2.实现方案:多进程,多线程3.并行与并发并发:同时处理多个任务,内核在任务间不断的切换达到好像多个任务被同时执行的效果,实际每个时刻只有一个任务占有内核。并行:多个任务利用计... 查看详情

linux单进程如何实现多核cpu多线程分配?

...出在cpu占用率上,双cpu8核但程序运行下来只能使用一个线程。程序本身不可修改,现在的问题就是如何将此程序多线程化以达到效果。是否可以通过命令或修改内核参数使程序占用多个内核并行运行呢?(程序本身没有问题,... 查看详情

第4章多线程

4.1线程  每个线程是cpu使用的一个基本单元,它包括线程ID、程序计数器、寄存器组和堆栈。它与同一进程的其他线程共享代码段、数据段和其他操作系统资源。               多线程编程的优点:响... 查看详情

Qt 线程似乎并没有在内核上平均共享

】Qt线程似乎并没有在内核上平均共享【英文标题】:Qtthreadingdoesnotseemtoshareequallyovercores【发布时间】:2012-03-2820:07:18【问题描述】:我有一个多线程应用程序。但是我注意到,我正在使用OpenGL,如果没有信号量,这将无法正常... 查看详情

多任务爬虫(代码片段)

...、为什么要使用多任务爬虫?在大量的url需要请求时,单线程/单进程去爬取,速度太慢,此时cpu不工作,浪费cpu资源。爬取与写入文件分离,可以规避io操作,增加爬取速度,充分利用cpu。2、多任务分类进程:进程是操作资源... 查看详情

线程详细剖析

摘自《C++多核高级编程》6.1什么时线程线程时进程中可执行代码流的序列,它被操作系统调度,并在处理器或内核上运行。所有的进程都有一个主线程(primarythread)。主线程时进程的控制流或执行线路。具有多个线程的进程拥... 查看详情

memcached的多线程是什么?如何使用它们?

线程就是定律(threadsrule)!在StevenGrimm和Facebook的努力下,memcached1.2及更高版本拥有了多线程模式。多线程模式允许memcached能够充分利用多个CPU,并在CPU之间共享所有的缓存数据。memcached使用一种简单的锁机... 查看详情

多线程:线程多于内核有啥意义?

】多线程:线程多于内核有啥意义?【英文标题】:Multithreading:Whatisthepointofmorethreadsthancores?多线程:线程多于内核有什么意义?【发布时间】:2011-03-0818:09:53【问题描述】:我认为多核计算机的意义在于它可以同时运行多个线... 查看详情

分析多线程代码,采样如何工作

】分析多线程代码,采样如何工作【英文标题】:Profilingmultithreadedcode,howdoessamplingwork【发布时间】:2016-07-2912:27:24【问题描述】:我正在使用VisualStudio来分析我的多线程C++应用程序。根据我对采样方法的了解,我了解到它会以... 查看详情

为啥我的 java 长时间运行的线程(5k+ 线程)没有利用所有机器内核(12 核)?

】为啥我的java长时间运行的线程(5k+线程)没有利用所有机器内核(12核)?【英文标题】:WhymyjavalongrunningThreads(5k+thread)notutilizingallmachinescores(12cores)?为什么我的java长时间运行的线程(5k+线程)没有利用所有机器内核(12核)... 查看详情

php利用curl实现多线程抓取网页和下载文件

...器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集数据可以利用PHPquery类来采集数据库,在此之外也可以用Curl,借助Curl这个功能实现并发多线程的访问多个url地址以实现并发... 查看详情

线程是如何在 Windows 上的多个处理器上执行的?

】线程是如何在Windows上的多个处理器上执行的?【英文标题】:HowarethreadsexecutedonmultipleprocessorsonWindows?【发布时间】:2009-07-1012:06:23【问题描述】:我使用的是Windows(Windows7、XP和Vista)。如果我创建一个多线程程序,线程会在... 查看详情

在一个内核上运行的多个线程如何进行数据竞争?

】在一个内核上运行的多个线程如何进行数据竞争?【英文标题】:Howcanmultiplethreads,runningonasinglecore,haveadatarace?【发布时间】:2016-08-0223:54:09【问题描述】:我有以下简单的c++源代码:#defineCNTNUM100000000intiglbcnt=0;intiThreadDone=0;void*... 查看详情

多进程概念

意义:充分利用计算机的资源提高程序的运行效率定义:通过应用程序利用计算机的多个核心达到同时执行多个任务的目的,一次提高计算机运行效率并行和并发的区别:  并行:多个计算机核心同时在处理多个任务,这时多... 查看详情