https://cloud.tencent.com/developer/article/1886157?areaSource=&traceId=
 

文章目录

希望开此篇能帮到你。

区分 多CPU && 多核CPU

最早意识到这两个概念可能不一样是在什么时候呢,不是在买电脑的时候哈,是在安装虚拟机的时候。

安装虚拟机的时候,有一步是要我们选择虚拟机的CPU数量和核数的,我当时其实就有点懵,这俩有区别吗?2CPU各2核和1CPU4核有什么不一样吗?这还要选啊?

但是很快就打消了这个疑虑,没有太在意了。现在想想,错过了认知的机会啊。 一个CPU呢,可以由很多的核,但是,它依旧是一个CPU,不会因为它开了8个核就变成了八个CPU。

这里的CPU,是物理CPU,后面就以物理CPU来命名。此外,还有逻辑CPU,逻辑CPU数怎么算呢? 物理CPU数 * 每个CPU核数,如果支持超线程的话,再乘个2。

这些概念先记一下,后面要用。

多个物理CPU,CPU通过总线进行通信,效率比较低。

多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信。


CPU缓存

CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。

随着多核CPU的发展,CPU缓存通常分成了三个级别:L1,L2,L3。级别越小越接近CPU,所以速度也更快,同时也代表着容量越小。L1 是最接近CPU的, 它容量最小,速度最快,每个核上都有一个 L1 缓存,L1 缓存每个核上其实有两个 L1 缓存, 一个用于存数据的 L1d Cache,一个用于存指令的 L1i Cache。L2 缓存 更大一些,速度要慢一些, 一般情况下每个核上都有一个独立的L2 缓存; L3 缓存是三级缓存中最大的一级,同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个 L3 缓存。

读取数据过程。就像数据库缓存一样,首先在最快的缓存中找数据,如果缓存没有命中则往下一级找, 直到三级缓存都找不到时,向内存要数据。一次次地未命中,代表取数据消耗的时间越长。

计算过程。程序以及数据被加载到主内存;指令和数据被加载到CPU的高速缓;CPU执行指令,把结果写到高速缓存;高速缓存中的数据写回主内存。


并行 && 并发

并行,你按下时间静止,你会看到有好多个 进程/线程 都活着。 并发,你按下时间静止,你会看到只有一个 进程/线程 活着,其他都在排队。


多CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发 之间的关系

1、进程的运行不仅仅需要CPU,还需要很多其他资源,如内存啊,显卡啊,GPS啊,磁盘啊等等,统称为程序的执行环境,也就是程序上下文。

2、线程是CPU调度和分配的基本单位,一定要和 进程是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位 区别清楚。有句话说CPU只能看到线程,可以这么理解,假设我是CPU,我闭着眼,操作系统调度器将一个进程分配给我之后,我拿到进程睁开眼,我看到的是什么?我看到的是进程中的很多线程,那么我现在能调度和分配的是什么?进程?不行,因为我看不到其他进程,何来调度分配,只能调度我看到的那些线程,如果我是4核的话,把线程ABCD分配到核心1234,其他的线程依然要等待分配,至于等待多久,如何分配,暂不在本文讨论范围。

3、多核心技术是将多个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的HT技术(超线程技术)是在CPU内部仅复制必要的资源、让一个核模拟成两个线程;也就是一个实体核心,两个逻辑线程,在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作。

4、一个进程最多在一个物理CPU上运行(能拿到资源不错了),如果这个CPU的空闲的核大于等于进程的线程数,就安排了,如果不够,那就先安排一部分线程,其余的等着。


多核CPU,可以并行执行多进程、多线程。多线程应该不用我解释了,多进程参考nginx架构。 多个CPU,可以并行执行多进程,自然可以并行多线程。怎么并行多进程呢?要么咱多手动多开几个进程,要么fork出子进程。


Linux下查看CPU相关信息

CPU的信息主要都在/proc/cupinfo中:

# 查看物理CPU个数
cat /proc/cpuinfo|grep "physical id"|sort -u|wc -l # 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo|grep "cpu cores"|uniq # 查看逻辑CPU的个数
cat /proc/cpuinfo|grep "processor"|wc -l # 查看CPU的名称型号
cat /proc/cpuinfo|grep "name"|cut -f2 -d:|uniq

复制

Linux查看某个进程运行在哪个逻辑CPU上

ps -eo pid,args,psr
#参数的含义:
pid - 进程ID
args - 该进程执行时传入的命令行参数
psr - 分配给进程的逻辑CPU 例子:
[~]# ps -eo pid,args,psr | grep nginx
9073 nginx: master process /usr/ 1
9074 nginx: worker process 0
9075 nginx: worker process 1
9076 nginx: worker process 2
9077 nginx: worker process 3
13857 grep nginx 3

[转帖]多CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发的更多相关文章

  1. [转帖]Windows和Linux对决(多进程多线程)

    Windows和Linux对决(多进程多线程) https://blog.csdn.net/world_2015/article/details/44920467 太长了 还没看完.. 还是没太理解好 ...

  2. 多CPU,多核,多进程,多线程

    当面临这些问题的时候,有两个关键词无法绕开,那就是并行和并发. 首先,要先了解几个概念: 1.进程是程序的一次执行. 2.进程是资源分配的基本单位(调度单位). 3.一个进程可以包括多个线程. 4.在 ...

  3. [svc][cpu][jk]cpu的核心查看及什么是cpu的负载

    监控的时候我们会监控cpu的负载,那么什么是负载? 编程时候有多核多线程的概念,那么cpu内部如何运作的? 搞清多少bit cpu? 有几个物理cpu?每个cpu是几核的? 之前购买内存条时候,需要关 ...

  4. 浅谈多核CPU、多线程、多进程

    1.CPU发展趋势 核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核32线程),我们如何来面对这突如其 ...

  5. 【转】浅谈多核CPU、多线程、多进程

    浅谈多核CPU.多线程.多进程 1.CPU发展趋势 核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核3 ...

  6. python GIL 全局锁,多核cpu下的多线程性能究竟如何?

    python GIL 全局锁,多核cpu下的多线程性能究竟如何?GIL全称Global Interpreter Lock GIL是什么? 首先需要明确的一点是GIL并不是Python的特性,它是在实现 ...

  7. go/node/python 多进程与多核cpu

    node node单线程,没有并发,但是可以利用cluster进行多cpu的利用.cluster是基于child_process的封装,帮你做了创建子进程,负载均衡,IPC的封装. const clu ...

  8. python多线程不能利用多核cpu,但有时候多线程确实比单线程快。

    python 为什么不能利用多核 CPU  GIL 其实是因为在 python中有一个 GIL( Global Interpreter Lock),中文为:全局解释器锁.  1.最开始时候设计GIL是 ...

  9. 多核CPU上python多线程并行的一个假象

    GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作 ...

  10. python多线程为什么不能利用多核cpu

    GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作 ...

随机推荐

  1. 华为云发布CodeArts Inspector漏洞管理服务,守护产品研发安全

    本文分享自华为云社区<华为云发布CodeArts Inspector漏洞管理服务,守护产品研发安全>,作者: 华为云头条. 2023年9月7日,华为云正式发布CodeArts Inspec ...

  2. 提升漏洞修复率,DevSecOps真的很有一套

    摘要:在业务应用交付规模不断扩大.交付速度不断提高.开发运营场景一体化的大环境下,安全问题你真的重视么? 本文分享自华为云社区<HDC.Cloud2021 | 提升漏洞修复率,DevSecOps ...

  3. VRAR产业峰会暨第二届华为VR开发应用大赛颁奖典礼在和平区成功举办!

    摘要:近日,由沈阳市和平区人民政府和华为技术有限公司主办的VRAR产业峰会暨第二届华为VR开发应用大赛颁奖典礼在沈阳君悦酒店圆满举办. 12月29日,由沈阳市和平区人民政府和华为技术有限公司主办的VR ...

  4. 如何上传苹果ipa安装包?

    ​ 如何上传苹果ipa安装包? 引言 在将应用程序上架到苹果应用商店之前,开发者需要学习如何上传ipa安装包.本文将介绍使用appuploader工具将ipa安装包上传到苹果应用商店的详细步骤,并提供 ...

  5. Solon2 常用注解之 @Component 与 @Bean 的区别

    @Component 与 @Bean 设计的目的是一样的,都是注册 Bean 到容器里. 1.@Component 注解 及它的子类型 @Configuration,@Controller,@Remo ...

  6. 用 Java?试试简单的框架 Solon v1.10.9

    Java 国产的轻量级应用开发框架.可用来快速开发 Java 应用项目.主框架仅 0.1 MB.Helloworld: @Controller public class App { public st ...

  7. 记录一次Java内存泄露分析过程

    版权说明: 本文章版权归本人及博客园共同所有,转载请在文章前标明原文出处( https://www.cnblogs.com/mikevictor07/p/13032635.html ),以下内容为个人 ...

  8. 创建DOM节点时出现错误信息:box.appendChild is not a function

    1.代码正常书写如下 <div class="box"></div> <!-- JavaScript代码 --> <script> ...

  9. MyBatis-Plus (SpringBoot2 版)看这篇就足够了,一发入魂

    1.了解 Mybatis-plus 1.1.Mybatis-Plus 介绍 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简 ...

  10. L2-024 部落 (25 point(s)) (并查集)

    补题链接:Here 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查 ...