多核CPU,单核CPU,超线程技术,与多线程程序深入浅出

CPU核心单元组

他只是CPU的一部分,不能称为CPU,它负责逻辑运算,是最重要的一部分。

CPU

CPU是CPU核心单元组(逻辑处理单元)时钟电路,高速缓存器等等组合的一个整体,其中CPU核心单元组(逻辑处理单元)是它的核心

单核CPU

很早以前的技术并没现在这样发达,一台电脑上只有一个CPU,这个CPU上也只有一个CPU核心单元组(逻辑处理单元)。此时这个所谓的CPU核心单元组也就是我们所说的

多核CPU

技术进步后一个CPU上可以有多个CPU核心单元组(逻辑处理单元)此时我们说这个CPU是多核

超线程技术

英特尔在奔腾四年代在奔腾处理器上广泛采用的一个技术,让一个处理器通过技术手段模拟成两个处理器,从而提高多任务的协调处理性能。也由于这个原因,所以单核心支持超线程技术的处理器在Windows操作系统下均会被识别成两个处理器。

如何在Windows系统上查看CPU是几核几处理器?

(1)windows键+R 打开运行并输入cmd命令

 (2)输入wmic回车

  (3)输入cpu get  *  回车

 (3)如下图所示NumberOfCores就是你的电脑是几核,NumberOfLogicalProocessors意思是逻辑处理器的数目,也就是通过超线程技术模拟后的处理器数目(或者也可以叫做逻辑核数)。

线程运行的载体

每个线程它运行的载体是逻辑单元组。也就是说具体是每个逻辑运算单元(逻辑核)在运行线程所要执行的代码。

多核单核对多线程程序的影响

单核

        多线程对于单核CPU(一个逻辑处理单元)来说,它并不能提升程序整体运行效率,比如A,B俩个任务,各需要10秒,单核只不过是执行0.001秒A再执行0.001秒B,最后还是要20秒才能执行完,但它解决了在执行一个任务时,另一个任务没法没动静的问题,试想如果你打开网页下载东西,没有多线程,他一直执行下载,你如何浏览别的内容对浏览器进行别的操作?

多核

        多线程对于多核CPU(多个逻辑处理单元),他能提升程序运行效率,正如前面所说,线程运行的载体是逻辑单元(逻辑核),当多核电脑运行多线程时,它不同的线程分配给不同的逻辑单元(逻辑核),因此他是真正意义上的并发,举个例子,假设俩个核,核1,核2,俩个任务A,B各需要10秒,他们同时给核1,核2,十秒后同时执行完毕。

我在VC++深入详解上遇到的一个问题

// MultiThread.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include <iostream>
#include <windows.h>

using namespace std;


DWORD WINAPI Fun1Proc(
	LPVOID lpParameter   // thread data
);

int main()
{
	HANDLE hThread1;

	hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
	CloseHandle(hThread1);

	cout << "main thread is running\n";
	return 0;
}

//线程1的入口函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter)   // thread data                                              
{

	cout << "thread1 is running\n";
	return 0;
}

         在看VC++深入详解第三版第16章,16.3节里关于简单多线程示例,书上说运行结果是是main thread is running,没有线程里的 thread1 is running,因为在执行完主程序的代码后,就释放所有进程资源,没给线程留机会。需要return 0;之前加个Sleep(100)函数等一下,给线程分配时间片一个机会。但我的结果缺没加Sleep函数也正常输出。很哪闷,后来了解后才发现我电脑是多逻辑单元(多逻辑核),而笔者的是单核的。只需把程序设置成单逻辑单元(单核)运行即可。

Windows系统下如何设置程序让他在一个逻辑单元上运行?

下面展示的就是8个逻辑处理单元,其实是四核运用超线程技术模拟8核。

 

 

 结果如上,这下运行结果与书上的一样了。

把程序由多核运行设置为单核运行有什么用?

        虽然是多核心cpu,依然会有一些程序会让cpu处理达到100%,比如运行winrar压缩某个大文件的时候,即使是多核cpu也会达到100%。此时如果运行其它程序会变得十分卡,所以让压缩程序只运行在一个cpu上面,可以保证在压缩时稳定的运行其它程序。虽然此时压缩程序可能会慢很多(因为单核运行了,不能用别的核的运算能力)。

结尾

        通过以上经历,我获益很多,记录此文希望帮助大家加深理解。学习是一个由模仿到举一反三的过程,我们不应该仅仅照着书上走马观花一边,更应该仔细揣摩机制与逻辑,举一反三,这个过程往往会让你扩大对他的理解与知识面。以上是本人愚见,如有理解错误,请大家指出,希望大家互相进步,早日财务自由。

Guess you like

Origin blog.csdn.net/qq_41607336/article/details/121404109