JAVAEE_____计算机是如何运行的,进程和线程

一. 计算机是如何工作的

1. 计算机的构成

现代的计算机大多遵守冯诺依曼体系结构。

1.1 计算机二进制

除了冯诺依曼体系结构,还有计算机二进制

1.2 冯诺依曼体系结构

645

1.2.1 CPU(加工厂)

CPU 中央处理器:进行算术运算和逻辑判断

1.2.2 存储器 (仓库)

分为内存和外存,用于存储数据(使用二进制方式存储)
内存,外存(硬盘、光盘、软盘…)
内存 VS 外存

内存小,外存大
内存制作工艺较高,外存成本低
内存执行速度快(纳秒级别),外存执行速度慢(微秒级别)
内存重启之后数据丢失,外村数据会永久保存(除非人为删除)

1.2.3 输入设备

键盘,鼠标,麦克风…

1.2.4输出设备

打印机,音响,显示器

关于存储空间和访问速度

磁盘 > 内存 > CPU
关于访问速速
CPU > 内存 > 磁盘

2.硬件——CPU是如何工作的?

2.1 CPU定义和组成

CPU也称为微处理器,是计算机的心脏和大脑,它的主要工作是执行算数和逻辑运算并将指令编排在一起。
CPU有两个主要组件:

  1. 算数和逻辑单元ALU
  2. 控制单元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并不是固定不变的,是每次启动进程时动态分配的
在这里插入图片描述

  1. 进程状态包括:
    新建状态
    就绪状态
    运行状态
    阻塞状态
    销毁状态

  2. 优先级: 决定进程的执行顺序

  3. 记账顺序·:为了保证进程执行的相对公平 ,可以规避进程饿死。记录CPU调用的次数和执行间隔,为进程调度器提供数据支持。进程通过调度算法来决定调用哪个进程

  4. 上下文:保存本次的执行状态,以便下次继续执行,整个过程就称之为一个上下文

  5. 一组内存:指定进程需要的资源

3.2.1 进程关联的重要概念

3.2.1.1 时间片

每个进程的CPU执行的时间

3.2.1.2 内核态和用户态

内核态表示操作系统作为最底层的软件拥有最高的权限叫做内核态
用户态指用户编写的程序

3.3 线程

线程是操作系统可以进行运算和调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程并行执行不同的任务。

3.3 线程优势

线程的创建和消耗比进程成本低很多效率更高,而且同一个进程中的多个线程是可以共享资源的,而进程和进程之间是不能共享资源的,因此这就是线程诞生的意义。
线程之间可以共享的资源

  1. 内存可以共享加粗样式
  2. 打开的文件可以共享
    线程间不可共享的资源
  3. 线程的上下文、状态、优先级、记账信息不共享
  4. 每个线程有一个栈空间不共享
    线程可以理解为一个轻量级的“进程”,进程是操作系统分配资源的最小单位,线程是操作系统执行和调度(运行)的最小单位

3.4 进程 VS 线程

(1) 单进程单线程
(2)单进程多线程
(3)多进程单线程——并没有改变最终的结果
(4)多进程多线程——没有必要

3.4.1 进程和线程的区别:
  1. 从属关系不同:线程属于进程,而进程不属于进程。
  2. 描述的侧重点不同:进程是系统分配资源的最小单位,而线程是系统调度的最小单位。
  3. 共享资源的方式不同:进程之间是不能共享资源的,线程之间是可以共享资源(内存,打开的文件)
  4. 上下切换的速度不同:线程上下文切换的速度是比较快的,而进程的上下文切换比较慢。
  5. 操纵对象是不同的:进程是有操纵系统操纵的,而咱们的的线程是程序员可以编码进行操纵的。

3.5 线程不是越多越好

如果创建的线程过多就会造成“狼多肉少”的情况,也就会造成恶意竞争和线程过度调度的问题,反而会降低线程的执行效率。

应该创建多少个线程合适?
没有标准答案,要根据实际服务器的硬件配置和任务类型来定,通常比较合适的线程数量是 CPU个数 - 1

新建线程的最优场景 ?
计算密集类任务,比较费CPU,这个时候线程的数量不宜太多‘
IO密集型任务,不费CPU,但是读写需要很长的时间,可以适当创建几个线程

猜你喜欢

转载自blog.csdn.net/biteqq/article/details/123559590
今日推荐