文章目录
- 一. 计算机是如何工作的
- 1. 计算机的构成
- 1.1 计算机二进制
- 1.2 冯诺依曼体系结构
- 1.2.1 CPU(加工厂)
- 1.2.2 存储器 (仓库)
- 1.2.3 输入设备
- 1.2.4输出设备
- 关于存储空间和访问速度
- 2.硬件——CPU是如何工作的?
- 2.1 CPU定义和组成
- 2.2 算数和逻辑单元
- 2.2.1 寄存器
- 2.3 控制单元
- 3. 软件
- 3.1操作系统
- 3.2 进程
- 3.2.1 进程关联的重要概念
- 3.2.1.1 时间片
- 3.2.1.2 内核态和用户态
- 3.3 线程
- 3.3 线程优势
- 3.4 进程 VS 线程
- 3.4.1 进程和线程的区别:
- 3.5 线程不是越多越好
一. 计算机是如何工作的
1. 计算机的构成
现代的计算机大多遵守冯诺依曼体系结构。
1.1 计算机二进制
除了冯诺依曼体系结构,还有计算机二进制
1.2 冯诺依曼体系结构
1.2.1 CPU(加工厂)
CPU 中央处理器:进行算术运算和逻辑判断
1.2.2 存储器 (仓库)
分为内存和外存,用于存储数据(使用二进制方式存储)
内存,外存(硬盘、光盘、软盘…)
内存 VS 外存
内存小,外存大
内存制作工艺较高,外存成本低
内存执行速度快(纳秒级别),外存执行速度慢(微秒级别)
内存重启之后数据丢失,外村数据会永久保存(除非人为删除)
1.2.3 输入设备
键盘,鼠标,麦克风…
1.2.4输出设备
打印机,音响,显示器
关于存储空间和访问速度
磁盘 > 内存 > CPU
关于访问速速
CPU > 内存 > 磁盘
2.硬件——CPU是如何工作的?
2.1 CPU定义和组成
CPU也称为微处理器,是计算机的心脏和大脑,它的主要工作是执行算数和逻辑运算并将指令编排在一起。
CPU有两个主要组件:
- 算数和逻辑单元ALU
- 控制单元CU
2.2 算数和逻辑单元
ALU 是计算机中进行算数和逻辑运算的核心部件,是计算机的数学大脑。
算数和逻辑单元又分为
算数单元:负责计算机里的所有数字操作
(1)电子开关 (2) 门电路 (3)进制相加的特点 (4)半加器 (5)全加器
逻辑单元: 主要用来进行逻辑操作,最基本的操作就是 与 或 非操作
2.2.1 寄存器
寄存器用来存储ALU进行计算或逻辑控制之后的一个结果的存储,寄存器在CPU中。
2.3 控制单元
来指挥ALU进行何种的运算
3. 软件
计算机除了硬件之外最重要的资源就是软件了,而系统中最大,最重要的“软件”就是操作系统了
3.1操作系统
操作系统是一组做计算机资源管理的软件的统称。目前最常见的操作系统又:Windows系列,Unix系列,Linux系列,OSX系列,Android系列,iOS系列,鸿蒙等等
1.家庭 / 工作常用的操作系统:Windows (图形的操作界面,操作和上手比较简单)
2.Linux 系统:所有发布的程序(上手难度比较高,高性能)
3.MacOS 苹果系统:Windows 类似(市场占比比较少)UI效果跟好,基本没有病毒和烦人的广告
3.2 进程
是操作系统分配资源的最小单位,简单来说,将一个可执行文件运行起来就是一个进程。一个进程拥有的资源有自己的堆,栈,虚存空间(页表)。从编程的角度来理解进程,就是一个 PCB(process Contral Block)结构体
进程的组成
1.PID : 进程的唯一身份标识
PID并不是固定不变的,是每次启动进程时动态分配的
- 进程状态包括:
新建状态
就绪状态
运行状态
阻塞状态
销毁状态 - 优先级: 决定进程的执行顺序
- 记账顺序·:为了保证进程执行的相对公平 ,可以规避进程饿死。记录CPU调用的次数和执行间隔,为进程调度器提供数据支持。进程通过调度算法来决定调用哪个进程
- 上下文:保存本次的执行状态,以便下次继续执行,整个过程就称之为一个上下文
- 一组内存:指定进程需要的资源
3.2.1 进程关联的重要概念
3.2.1.1 时间片
每个进程的CPU执行的时间
3.2.1.2 内核态和用户态
内核态表示操作系统作为最底层的软件拥有最高的权限叫做内核态
用户态指用户编写的程序
3.3 线程
线程是操作系统可以进行运算和调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程并行执行不同的任务。
3.3 线程优势
线程的创建和消耗比进程成本低很多,效率更高,而且同一个进程中的多个线程是可以共享资源的,而进程和进程之间是不能共享资源的,因此这就是线程诞生的意义。
线程之间可以共享的资源:
- 内存可以共享加粗样式
- 打开的文件可以共享
线程间不可共享的资源: - 线程的上下文、状态、优先级、记账信息不共享
- 每个线程有一个栈空间不共享
线程可以理解为一个轻量级的“进程”,进程是操作系统分配资源的最小单位,线程是操作系统执行和调度(运行)的最小单位
3.4 进程 VS 线程
(1) 单进程单线程
(2)单进程多线程
(3)多进程单线程——并没有改变最终的结果
(4)多进程多线程——没有必要
3.4.1 进程和线程的区别:
- 从属关系不同:线程属于进程,而进程不属于进程。
- 描述的侧重点不同:进程是系统分配资源的最小单位,而线程是系统调度的最小单位。
- 共享资源的方式不同:进程之间是不能共享资源的,线程之间是可以共享资源(内存,打开的文件)
- 上下切换的速度不同:线程上下文切换的速度是比较快的,而进程的上下文切换比较慢。
- 操纵对象是不同的:进程是有操纵系统操纵的,而咱们的的线程是程序员可以编码进行操纵的。
3.5 线程不是越多越好
如果创建的线程过多就会造成“狼多肉少”的情况,也就会造成恶意竞争和线程过度调度的问题,反而会降低线程的执行效率。
应该创建多少个线程合适?
没有标准答案,要根据实际服务器的硬件配置和任务类型来定,通常比较合适的线程数量是 CPU个数 - 1
新建线程的最优场景 ?
计算密集类任务,比较费CPU,这个时候线程的数量不宜太多‘
IO密集型任务,不费CPU,但是读写需要很长的时间,可以适当创建几个线程