操作系统
“操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。”
大白话就是:操作系统是搞管理的软件,管理着硬件设备和各种软件,还要进行内存管理,文件管理,设备管理,以及接下来我们要讲的进程管理
进程
打开我们的任务管理器就能看到进程
进程定义:进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程
与进程密切相关的又有PCB进程控制块抽象(Process Control Block)
计算你内部需要管理任何现实事务,必须将其先抽象为一组有关联、互为一体的数据,在Java中就为创建一个类
lass PCB {
/ 进程的唯一标识 —— pid;
/ 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
/分配给该资源使用的各个资源
/ 进度调度信息(留待下面讲解)
}
PCB有一个唯一标识----pid如图:
每次创建一个进程,都会生成一个唯一标识,在程序运行时PID是不会改变的,但进程终止后会被回收
每次创建一个进程都会进行如下操作:
- 创建PCB
- 分配系统资源(这一步最消耗时间)
- 把PCB加入到操作系统内核的双向链表中
我们创建一个进程,以银行取钱为例:一家银行就为一个进程,它用来办理各项银行业务。但是当人多了的时候,业务办理效率就很慢了,于是为了提高效率,我们就得多建一家银行,这一家银行又为一个新的进程。但是多建家银行这成本就很高了,我们还有什么办法呢?于是我们不多建银行,而是选择在原来的银行里,多开设几个柜台,这下效率一下就提上去了,成本也降低了,那么多开的柜台,我们就称之为一个线程,那么何为线程。
线程
进程和线程的关系
- 进程是包含线程的,一个进程最少有一个进程
- 两个进程所用的空间是不同的,就如同新建银行占地不同,但是一个进程内的线程所用空间是相同的,开设的柜台都在同一家银行里
再补充一下CPU核心与线程间的关系:
一般来说,一个核心对应一个线程(当然,intel有超线程技术,一个核心能对应两个线程)。
核心越多,能同时进行的线程就越多
所以,当多核资源足够的情况下,我们当然是选择新增线程来提高程序运行效率。
但线程不是越多越好
- 当cpu核心被吃满之后,新增线程就已经没有意义了,还会额外增加调度的成本。
- 线程安全问题,当多个线程访问同一个变量时就有可能会产生冲突,若某个线程抛出异常又没及时处理,就会导致整个进程崩溃
就像这样