认识cpu、核、进程与线程——备忘篇

转载来自: https://blog.csdn.net/zhengyshan/article/details/80641770

1.个人PC 机 一般一核只有一个线程 1:1,例如 :4核cpu 一般为4线程
2.服务器CPU 一般一核双新线程 1:2, 例如 4核 八线程 ,这得益于超线程技术(将一个物理内核做2个虚拟内核,但是性能肯定不如2个物理内核的)

cpu与核心
物理CPU
物理CPU是相对于虚拟CPU而言的概念,指实际存在的CPU处理器,安装在PC主板或服务器上。

物理核
CPU中包含的物理内核(核心)个数,比如多核CPU,单核CPU(古老的CPU)。这个多核或者单核已经集成在CPU内部了。

在linux系统下面的/proc/cpuinfo文件的条目中:

有多少个不同的physical id就有多少个物理CPU。

cpu cores记录了对应的物理CPU(以该条目中的physical id标识)有多少个物理核。

[root@zyshanlinux-01 ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel® Core™ i7-4700MQ CPU @ 2.40GHz
stepping : 3
microcode : 0x22
cpu MHz : 2393.631
cache size : 6144 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数

逻辑核(逻辑CPU或虚拟核)
所谓的4核8线程,4核指的是物理核心。用Intel的超线程技术(HT)将物理核虚拟而成的逻辑处理单元,现在大部分的主机的CPU都在使用HT技术,用一个物理核模拟两个虚拟核,即每个核两个线程,总数为8线程。

在windows系统下面看下图,我们看到有8个cpu记录,其实我们使用的四核CPU只是使用HT技术虚拟出来8个逻辑CPU;在linux系统下面的/proc/cpuinfo文件的条目中siblings记录了对应的物理CPU(以该条目中的physical id标识)有多少个逻辑核。

在操作系统看来是8个核,但是实际上是1个物理CPU中的4个物理内核。

通过超线程技术可以实现单个物理核实现线程级别的并行计算,但是比不上性能两个物理核。

单核cpu和多核cpu
都是一个cpu,不同的是每个cpu上的核心数。

多核cpu是多个单核cpu的替代方案,多核cpu减小了体积,同时也减少了功耗。

一个核心只能同时执行一个线程。

进程和线程
理解
进程是操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位。

线程是cpu调度和分配的基本单位。

我们打开的聊天工具,浏览器都是一个进程。

进程可能有多个子任务,比如聊天工具要接受消息,发送消息,这些子任务就是线程。

资源分配给进程,线程共享进程资源。

对比
对比 进程 线程
定义 进程是程序运行的一个实体的运行过程,是系统进行资源分配和调配的一个独立单位 线程是进程运行和执行的最小调度单位
系统开销 创建撤销切换开销大,资源要重新分配和收回 仅保存少量寄存器的内容,开销小,在进程的地址空间执行代码
拥有资产 资源拥有的基本单位 基本上不占资源,仅有不可少的资源(程序计数器,一组寄存器和栈)
调度 资源分配的基本单位 独立调度分配的单位
安全性 进程间相互独立,互不影响 线程共享一个进程下面的资源,可以互相通信和影响
地址空间 系统赋予的独立的内存地址空间 由相关堆栈寄存器和和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量

线程切换
cpu给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。

切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。

从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换。

而上下切换时会消耗大量的cpu时间。

线程开销
上下文切换消耗

线程创建和消亡的开销

线程需要保存维持线程本地栈,会消耗内存

串行,并发与并行
串行
多个任务,执行时一个执行完再执行另一个。

比喻:吃完饭再看视频。

并发
多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。

比喻: 一会跑去厨房吃饭,一会跑去客厅看视频。

并行
每个线程分配给独立的核心,线程同时运行。

比喻:一边吃饭一边看视频。

多核下线程数量选择
计算密集型
程序主要为复杂的逻辑判断和复杂的运算。

cpu的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源。

IO密集型
程序主要为IO操作,比如磁盘IO(读取文件)和网络IO(网络请求)。

因为IO操作会阻塞线程,cpu利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高cpu利用率。

总结
提高性能的一种方式:提高硬件水平,处理速度或核心数。

另一种方式:根据实际场景,合理设置线程数,软件上提高cpu利用率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值