注意看修饰词。

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,wmiccpu 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、核心,进程、线程,串行、并发、并行相关推荐

  1. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)

    PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...

  2. CPU核心数线程数、程序进程线程、并发并行的简单理解

    CPU核心数线程数.程序进程线程.并发并行.简单理解和区分 这篇文章是对上述感念的简单理解,想深入研究可以看看<计算机组成原理> CPU的核心数 线程数 当我们买电脑的时候,会看到CPU的 ...

  3. 多核CPU 跟 进程/线程

    多核CPU 跟 进程/线程 概述 现在大家使用的基本上都是多核cpu,一般是4核的.平时应用程序在运行时都是由操作系统管理的.操作系统对应用进程进行调度,使其在不同的核上轮番运行. 对于普通的应用,操 ...

  4. 02-CPU基础知识:通俗易懂方式理解主频、核心、线程、缓存、架构

    我们通常会将CPU比喻为人类的大脑,是计算机的核心硬件,决定了一台电脑的运算性能好坏.我们在选购CPU的时候,通常都会在网上查询处理器型号参数,主要是看主频.核心.线程.缓存.架构等参数,那么对于小白 ...

  5. 并发、并行、同步、异步、进程,线程、串行、并行?一文弄懂八大概念

    并发.并行.同步.异步.进程,线程.串行.并行?一文弄懂八大概念 参考博文:并发.并行.串行.同步.异步的区别? java多线程详解(并发,并行,同步) 文章目录 并发.并行.同步.异步.进程,线程. ...

  6. CPU核心数线程数、程序进程线程、并发并行

    核心数(物理概念) 8核:有8个相对独立的CPU核心单元组,这是物理概念,也就是说1个CPU有 8个独立的小CPU,物理上只能同时处理8个任务,也就是物理上是8核8线程. 线程数(逻辑概念) 既然物理 ...

  7. 进程,线程和协程 并行与并发

    一.进程 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大 ...

  8. 进程串行变并行linux,linux进程简述

    Introduction: •   A process is a program in execution (进程是程序在执行) •   A process is created every time ...

  9. python 并发笔记--------简单的进程/线程池实现并发IO/CPU 操作

    前记:"抨击线程的往往是系统程序员,他们考虑的使用场景对一般的应用程序员来说,也许一生都不会遇到--应用程序员遇到的使用场景, 99% 的情况下只需知道如何派生一堆独立的线程,然后用队列收集 ...

  10. 观察Linux进程 线程的异步并发执行,操作系统linux版实验报告.doc

    操作系统linux版实验报告.doc (29页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 操作系统实验报告(Linux版)网络142 ...

最新文章

  1. 当我们输入一条SQL查询语句时,发生了什么?
  2. 三张內存变化图揭秘基本类型数组的初始化
  3. 【转载】4412开发板、PC、ubuntu通过网线连接
  4. 快速实现MySQL迁移到Redis
  5. 使用rsync无密码传输
  6. java -cp 配置文件目录_java – 使用可执行JAR时指定Log4j2配置文件
  7. 使用js进行智慧树刷课
  8. itunes刷机一直正在恢复固件要多久_ios刷机报错故障汇总指南
  9. 管理信息系统期末复习
  10. centos安装宝塔跳过绑定手机号
  11. uinty SkinnedMeshRenderer (二) batches 优化,模型合并网格贴图
  12. 博客园app for xamarin android
  13. 补间动画tween.js
  14. hp扫描无法选择发送到计算机,HP Officejet Pro 8600打印机无法使用扫描到计算机的功能...
  15. 回顾刚来的那一天还历历在目,不禁感概一番
  16. 生成模型笔记预备知识笔记——概率分布变换
  17. GNSS和GPS的区别
  18. OPC及OPC服务器的设计与实现
  19. 论文笔记——基于多传感器融合的移动机器人SLAM算法研究
  20. seo提交工具_基础seo教程「百度熊掌号」

热门文章

  1. Voice Conversion Across Arbitrary Speakers based on a Single Target-Speaker Utterance
  2. kubesphere设置nodePort端口范围
  3. 潭州教育-Python学习笔记@基本数据类型作业2
  4. Monte Carlo蒙特卡洛算法经验与UCB算法与UCT算法
  5. 超全 ES6 语法教程
  6. 搭建游戏盒子需要多少钱?
  7. pyinstall加密打包
  8. MATLAB实现矩阵的乘法
  9. 记录一次定位视频通话 音视频卡顿的原因分析过程。
  10. 桌球台球门店小程序开发的前景和优势