我要理解的CPU、核心,进程、线程,串行、并发、并行
注意看修饰词。
1、计算机硬件基本组成
一个计算机(冯·诺依曼结构)【主要】硬件组成:
- 主板:是“交通枢纽”,各个部件工作的所在平台,它负责将各个部件紧密连接在一起,各部件通过主板进行数据传输
- CPU:中央处理器(Central Processing Unit),决定电脑的性能等级。主要有3大组成部分
- 运算器:算术逻辑运算单元(ALU,Arithmetic Logic Unit),负责执行所有的数学和逻辑工作
- 控制器:控制单元(CU,Control Unit),控制计算机的所有其他部件,如输入输出设备以及存储器
- 寄存器:存储单元,包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方
- 内存:将输入设备接收到的信息以二进制的数据形式存到存储器中
- RAM
- ROM
- CMOS
- 外存:辅助存储器,像硬盘等,能长期保存信息
- 显卡、网卡、声卡、电源、键盘、鼠标、显示器等
win10下观察其内存动态使用图:
CPU是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令、处理计算机软件中的数据。
CPU工作原理图:
windows10下 CPU动态使用图:
上述这款CPU的 构造:
这就是我们购买电脑时,所看到的CPU参数:该电脑拥有1个CPU,它有4个内核(表示有4个相对独立的CPU核心单元组,这是物理概念)
。
上述这个CPU可描述为:单CPU 4核心 4线程。4核 指的是物理核心(物理概念)。4线程(线程数是一个逻辑概念)。
上述这个CPU不支持 超线程技术。超线程技术、虚拟化技术 是两个不同的东西。
也可以通过cmd,wmic
,cpu get
查看:
- NumberOfCores:表示CPU核心数
- NumberOfLogicalProcessors:表示CPU线程数
多核 是指一个CPU有多个核心处理器,处理器之间通过CPU内部总线进行通讯。
多CPU是指简单的多个CPU工作在同一个系统上,多个CPU之间的通讯是通过主板上的总线进行的。
参考文章:
CPU个数,核心数,线程数
2、进程(process)、线程(thread)
注意下方语句中的 主体:操作系统、CPU
进程:是操作系统(OS)进行资源(CPU、内存、磁盘、IO、带宽等)分配的最小单位;
是OS对正在运行的程序的一种抽象,是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。
打开一个浏览器、一个聊天窗口分别是一个进程。进程可以有多个子任务,如聊天工具接收消息、发送消息,这些子任务是线程。
资源分配给进程,线程共享进程资源。
线程:是CPU调度和分配的基本单位。
一个进程可由多个线程的执行单元组成,每个线程都运行在同一进程的上下文中,共享同样的代码和全局数据。
每个进程至少有一个主执行线程,它无需由用户主动创建,一般由系统自动创建。系统创建好进程后,实际上就启动了执行该进程的执行主线程,执行主线程以函数地址形式,即程序入口函数(如 main函数),将程序的启动点提供给操作系统。主执行线程终止了,进程也就随之终止。
线程数 是一种逻辑概念,是模拟出的CPU核心数。
进程和线程的关系:进程可以简单理解为一个容器,有自己独立的地址空间,其内部的各个线程共享该地址空间。
其实严格讲应该是线程能够获得CPU资源,进程对CPU资源的获取也是体现在线程上的。至于CPU内核数,和进程线程没直接关系。操作系统(OS)可以把某个进程部署在某个CPU核上,当然这要取决于系统设计。
线程是CPU调度和分配的最小单位,操作系统会根据进程的优先级和线程的优先级去调度CPU。一个计算机可以并发(同时)的线程数,等于计算机上的逻辑处理器的个数(CPU个数 *每个CPU核心数 *每个内核线程数
)。
进程、线程是操作系统调度的,进程本身不会负责调度线程。在操作系统看来,线程和进程其实差不多,不同点是线程是迷你的进程,并且进程可以包含多个线程。
对比 | 进程 | 线程 |
---|---|---|
定义 | 进程是程序运行的一个实体的运行过程,是系统进行资源分配和调配的一个独立单位 | 线程是进程运行和执行的最小调度单位 |
系统开销 | 创建撤销切换开销大,资源要重新分配和收回 | 仅保存少量寄存器的内容,开销小,在进程的地址空间执行代码 |
拥有资产 | 资源拥有的基本单位 | 基本上不占资源,仅有不可少的资源(程序计数器,一组寄存器和栈) |
调度 | 资源分配的基本单位 | 独立调度分配的单位 |
安全性 | 进程间相互独立,互不影响 | 线程共享一个进程下面的资源,可以互相通信和影响 |
地址空间 | 系统赋予的独立的内存地址空间 | 由相关堆栈寄存器和和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量 |
线程切换
CPU给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。
切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。
从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换。
而上下切换时会消耗大量的CPU时间。
线程开销
- 上下文切换消耗
- 线程创建和消亡的开销
- 线程需要保存维持线程本地栈,会消耗内存
程序与进程、线程的关系
程序 只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态的实体。
而进程则不同,它是程序在某个数据集上的执行(即 进程是程序的一次执行),是一个动态的实体,有自己的生命周期,因创建而产生、因调度而运行、因等待资源或事件而被处于等待状态、因任务完成而被撤销,反映的是一个程序在一定的数据集上运行的全部动态过程。
进程和程序并不是一一对应的:一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。这是程序无法做到的,因为程序没有和数据产生直接的联系,即使是执行不同的数据的程序,但它们的指令的集合依然是一样的,因此无法唯一地标识出这些运行在不同数据集上的程序。
一般来说,一个进程肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有与之对应的进程(因为它没有执行)、也可能有多个进程与之对应(运行在不同的数据集上)。
不同的进程可以执行同一段程序,比如读取同一个文件数据,它们的读取函数的代码是相同的,并被2个进程或线程运行了。
一般情况下,写一个程序,没有单独开线程,那么默认这个程序的一次运行就是一个单进程;而如果调用了fork,这时将会有2个进程,调用thread,则这个进程就会有2个线程。
进程是一个实体,每一个进程都有它自己的内存地址段(heap、stack等),进程是执行中的程序。
程序是一个没有生命的实体,只有处理器赋予程序生命时,才能成为一个活动的实体。
线程,程序执行的最小单元,每个程序都至少有一个线程,若程序只有一个线程,那就是它程序本身。单线程的进程可以简单地理解为只有一个线程的进程。一个进程在同一时间只做一件事,但有了多线程后,一个进程同一时间可以做多件事,每个线程可以处理不同的事务。无论系统有几个CPU,其实进程运行在单CPU上,多线程也可以是进程并发处理多个事务。一个线程阻塞不会影响另一个线程。
多线程的进程可以尽可能地利用系统CPU资源,但也不是线程越多越好,线程越多,CPU分配给每个线程的时间就越少。
线程 包含了表示进程内执行环节所必需的信息:标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量、线程私有数据。
对于内存而言,堆内存、代码区一般属于一个进程,但是栈却是属于一个线程的,且每个线程拥有一个独立的栈。
errno也是属于单个线程的,每个线程中的errno是独立的。
进程内所有信息对于线程是共享的,包括执行代码、全局变量、堆内存、栈、文件描述符。
总结:
进程和线程都是一个时间段的描述,是CPU工作时间段的描述:
- 进程就是上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文
- 线程是共享了进程的上下文环境,的更为细小的CPU时间段。
3、串行、并发、并行
这些概念对于进程、线程都适用。
3.1、串行
多个任务,执行时一个执行完再执行另一个。
3.2、并发(concurrency)
多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
即一个指令 和另一个指令交错执行,操作系统实现这种交错执行的机制称为:上下文切换。上下文是指操作系统保持跟踪进程或线程运行所需的所有状态信息,如寄存器文件的当前值、主存内容等
3.3、并行(parallelism)
每个线程分配给独立的核心,线程同时运行。
单核CPU多个进程或多个线程内能实现并发(微观上的串行,宏观上的并行);多核CPU线程间可以实现微观上并行。
总结:
1、单CPU中进程只能是并发,多CPU计算机中进程可以并行。
2、单CPU单核中线程只能并发,单CPU多核中线程可以并行。
3、无论是并发还是并行,使用者来看,看到的是多进程,多线程。
4、CPU处理程序
4.1、单核CPU处理程序
在单CPU计算机中,有一个资源是无法被多个程序并行使用的:CPU。
单进程多线程处理:
在一个程序里,有两个功能:听歌、发送消息,这就是单进程2线程。如果听歌线程获取了锁,那么这个线程将获取CPU的运行时间,其他线程将被阻塞。但CPU始终处于运行状态,影响计算时间的其实只是加锁、解锁的时间,并不会发生CPU空闲的现象,CPU利用率100%。
线程阻塞:一般是被动的,在抢占资源中得不到资源,被动的挂起在内存,等待某种资源或信号将它唤醒。(释放CPU,不释放内存)
多进程处理:
将听歌、发消息分别写出两个独立的程序,独立运行,与上面不同的是,如果进程间需要通信,比如交换数据,则会需要很多步骤,效率低。
4.2、多核CPU处理程序
单进程多线程处理:线程可以跨核处理,进程之间则不能,如同支付宝不能访问QQ一样(安全性)。
跟单核对比:如果A核处理听歌线程阻塞,B核空闲,则CPU工作效率下降一半;没有阻塞时,QQ的A线程听歌、B线程发消息,多核CPU效率比单核快很多。
多进程多线程处理:不同的程序,不可能一个进程融合QQ、支付宝、浏览器等
多核下线程数量选择
计算密集型
程序主要为复杂的逻辑判断和复杂的运算。
CPU的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源。IO密集型
程序主要为IO操作,比如磁盘IO(读取文件)和网络IO(网络请求)。
因为IO操作会阻塞线程,CPU利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高CPU利用率。
总结:
- 提高性能的一种方式:提高硬件水平,处理速度或核心数。
- 另一种方式:根据实际场景,合理设置线程数,软件上提高CPU利用率。
进程:处理任务多,每个进程都有独立的内存单元,占用CPU资源相对较少。缺点是 进程间切换开销大。进程之间通信就如同两个程序之间的通信。
线程:处理任务相对较少,同时为了处理【并发】,多个线程共享内存单元,占用资源少。线程之间的通信就如同一个程序里的两个函数间通信,在函数里定义一个全局变量,两个线程(两个函数)都能用,线程间共享内存。
我要理解的CPU、核心,进程、线程,串行、并发、并行相关推荐
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)
PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...
- CPU核心数线程数、程序进程线程、并发并行的简单理解
CPU核心数线程数.程序进程线程.并发并行.简单理解和区分 这篇文章是对上述感念的简单理解,想深入研究可以看看<计算机组成原理> CPU的核心数 线程数 当我们买电脑的时候,会看到CPU的 ...
- 多核CPU 跟 进程/线程
多核CPU 跟 进程/线程 概述 现在大家使用的基本上都是多核cpu,一般是4核的.平时应用程序在运行时都是由操作系统管理的.操作系统对应用进程进行调度,使其在不同的核上轮番运行. 对于普通的应用,操 ...
- 02-CPU基础知识:通俗易懂方式理解主频、核心、线程、缓存、架构
我们通常会将CPU比喻为人类的大脑,是计算机的核心硬件,决定了一台电脑的运算性能好坏.我们在选购CPU的时候,通常都会在网上查询处理器型号参数,主要是看主频.核心.线程.缓存.架构等参数,那么对于小白 ...
- 并发、并行、同步、异步、进程,线程、串行、并行?一文弄懂八大概念
并发.并行.同步.异步.进程,线程.串行.并行?一文弄懂八大概念 参考博文:并发.并行.串行.同步.异步的区别? java多线程详解(并发,并行,同步) 文章目录 并发.并行.同步.异步.进程,线程. ...
- CPU核心数线程数、程序进程线程、并发并行
核心数(物理概念) 8核:有8个相对独立的CPU核心单元组,这是物理概念,也就是说1个CPU有 8个独立的小CPU,物理上只能同时处理8个任务,也就是物理上是8核8线程. 线程数(逻辑概念) 既然物理 ...
- 进程,线程和协程 并行与并发
一.进程 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大 ...
- 进程串行变并行linux,linux进程简述
Introduction: • A process is a program in execution (进程是程序在执行) • A process is created every time ...
- python 并发笔记--------简单的进程/线程池实现并发IO/CPU 操作
前记:"抨击线程的往往是系统程序员,他们考虑的使用场景对一般的应用程序员来说,也许一生都不会遇到--应用程序员遇到的使用场景, 99% 的情况下只需知道如何派生一堆独立的线程,然后用队列收集 ...
- 观察Linux进程 线程的异步并发执行,操作系统linux版实验报告.doc
操作系统linux版实验报告.doc (29页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 操作系统实验报告(Linux版)网络142 ...
最新文章
- 当我们输入一条SQL查询语句时,发生了什么?
- 三张內存变化图揭秘基本类型数组的初始化
- 【转载】4412开发板、PC、ubuntu通过网线连接
- 快速实现MySQL迁移到Redis
- 使用rsync无密码传输
- java -cp 配置文件目录_java – 使用可执行JAR时指定Log4j2配置文件
- 使用js进行智慧树刷课
- itunes刷机一直正在恢复固件要多久_ios刷机报错故障汇总指南
- 管理信息系统期末复习
- centos安装宝塔跳过绑定手机号
- uinty SkinnedMeshRenderer (二) batches 优化,模型合并网格贴图
- 博客园app for xamarin android
- 补间动画tween.js
- hp扫描无法选择发送到计算机,HP Officejet Pro 8600打印机无法使用扫描到计算机的功能...
- 回顾刚来的那一天还历历在目,不禁感概一番
- 生成模型笔记预备知识笔记——概率分布变换
- GNSS和GPS的区别
- OPC及OPC服务器的设计与实现
- 论文笔记——基于多传感器融合的移动机器人SLAM算法研究
- seo提交工具_基础seo教程「百度熊掌号」