你真的懂多线程吗?多线程 并行处理 CPU 操作系统
了解多线程、并行处理首先需要了解什么CPU、CPU核数、操作系统
CPU物理数
即电脑拥有的物理CPU数量,普通电脑一般只有一个CPU插槽,也就是只有一个物理CPU。我们日常说的CPU,就是指封装好的一个物理CPU,作为商品进行售卖。但在编程讨论时,某些情况下,我们说的CPU含义又是指其中一个运算单元,即下面的说的CORE核心。平时讲的四核CPU、六核CPU指的就是CPU的运算单元数,CPU同时运行的线程数。
CORE核心数(物理核心数)
核心数为一个物理CPU拥有的运算单元数量,例如8核,即一个CPU有8个核心,拥有8个独立的运算单元。一个运算单元有一套寄存器,一般还有L1,L2的私有缓存,可以独立执行一个任务(一般是线程),所以一个核心同一时刻只能运行一个线程,不论这个线程是哪个进程的。每隔一定时间,大概几十毫秒,就会切换线程,即切换任务(可能是同一个进程的线程,也可能是另外一个进程的线程,如果是其它进程的线程,会切换CR3)。
为什么要切换CR3?
首先了解什么是CR3。每个进程都会有自己的一张分级的页表,用于查找该进程所访问到的物理内存(因为进程都是独立的,物理内存肯定是限制访问)。
当操作系统执行进程切换的时候,会将执行该进程页表的那个指针加载到CR3寄存器,这样当进程切换后,CPU访问的内存就是属于该进程的内存或者内核所使用的内存。进程对应的页表指针是由内核进行维护的。
当核心被切换到别的线程,并且这个线程属于别的进程,CR3必须更新为该线程所属的进程页表的那个指针,所以会切换CR3。我只简单理解为CR3用来标记线程所属的进程。
下面我们再说CPU的时候,直接用CORE核心来代替CPU的说法可能更明确
增加内存条以提高运行速度
增加内存条可以提高电脑运行速度,但这取决于当前内存是否足够以及电脑其他硬件的性能。
如果内存容量已经满足需求,再增加内存对速度的提升将非常有限。反之,如果内存容量不足,增加内存条可以显著提升电脑运行速度。内存条的主要作用是为程序运行提供临时存储空间,内存条容量越大,能同时运行的程序就越多,电脑的处理速度也就越快。
然而,电脑的整体性能不仅取决于内存,还与CPU、显卡等硬件的性能密切相关。如果CPU或显卡性能不足,即使增加再多的内存也无法显著提升电脑速度。
此外,如果是内存低造成的电脑运行慢,增加内存条可以提速。但如果原有内存已经足够,或者电脑运行慢的原因并非内存不足,那么增加内存条可能无法显著提升电脑速度。
因此,在考虑是否增加内存条时,需要综合考虑电脑的整体配置和性能需求。
CPU核心数和线程数
目前主流CPU有双核、三核、四核、六核、八核、十六核等。
每个核心可以处理一定数量的线程数,增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的。
一个CPU的性能不仅取决于核心数量,还取决于每个核心能够处理的线程数量以及这些线程如何被调度和执行。
每个核心能够处理的线程数量
每个核心能够处理的线程数量取决于处理器的架构和是否采用了超线程技术。
在传统的处理器设计中,每个核心只能执行一个线程。然而,随着超线程技术的引入,一个核心现在可以同时处理多个线程。超线程技术允许处理器核心在单个物理核心上模拟出多个逻辑线程,从而提高了处理器的整体性能。具体来说,一个核心通过超线程技术可以同时处理2个线程,这使得处理器能够在不增加物理核心数量的情况下,提升性能高达40%。
例如,如果一个处理器具有两个核心,并且采用了超线程技术,那么这两个核心就可以模拟出4个逻辑线程进行并行处理。这种情况下,处理器实际上拥有4个线程的处理能力,尽管物理核心数只有两个2。
总的来说,现代处理器通过超线程技术,能够在单个物理核心上支持多个逻辑线程的执行,从而提高了处理器的并行处理能力和整体性能。