Java EE - 进程与多线程
目录
1.进程的概念
进程(Process)是操作系统对程序进行操作的概念分离,可以理解为程序一次执行的过程,同时进程是系统进行分配资源的最小单位。
1.1 进程控制块
进程控制块(Process Contral Block)可以理解为进程中执行操作的部分,例如,实现一个Test类,程序在执行到该类时,此时这一个类表示的就是一个进程块。
class Test{
private int a;
private String s;
//----方法一
// ---- 方法二
//----
}
1.2 进程调度
进程调度(Process Scheduling)也称进程分配,指的是操作系统执行进程时所分配的资源。
2.进程的关键要点
2.1 进程的标识符
操作系统给进程分配资源时需要先找到进程,而每一个进程系统都会分配一个PID作为进程的ID,
打开电脑的任务管理器(Ctrl + Shift + Esc)就可以找到当前的执行的进程和进程ID。

2.2 内存指针
系统在执行进程的过程本质上是在执行指令,进程的指令的构成由指令码和操作数组成,而这一些指令存储在一个容器中,当需要执行指令,需要找到存储容器的地址,而这个地址就保存在内存指针中(可以是一组)。
例如,进程执行的是一个加法的过程,操作数是 1 和 2;



系统执行进程的指令是从上到下执行,先执行第一条指令,获取到指令码:0001ff01,由IR读取后交给系统进行解析,通常指令码由4为操作码和4位操作数组成,解析完成后进行操作,0001是将操作数存放在寄存器A上,操作数是在RAM(Random Access Memory)地址上获取,ff01地址上的数据是1,将数据1存储在寄存器A中,完成第一条指令,程序计数器变为1;

同样的执行第二条指令,将操作数存放在寄存器B中。

第三条指令是将寄存器A和寄存器B存储的两个值相加,将相加的结果存放在寄存器A中,指令后的操作数是寄存器的编号,00表示的是寄存器A,01表示的是寄存器B。

第四条指令是将寄存器A的内容存放在指定的RAM位置。

通过内存地址就可以获取进程执行的指令信息和执行流程。
2.3 文件描述符
在操作系统中,并不会每时每刻都只执行一个进程,进程的执行需要系统分配资源,当系统暂时不执行进程时,可能进程的所有指令还未执行完成,等系统再次分配资源时,需要继续往下执行进程的指令,但是需要知道进程上一次执行的位置在那里,此时就可以使用文件描述符,文件描述符记录了进程执行的指令数(PC来查询),进程的PID,指令的执行结果等信息,等再次执行该进程,通过文件描述表就可以恢复到原来的进程执行的位置。

2.4 进程的状态
进程常见的状态有两种:
就绪状态:进程可以随时到CPU上运行;
堵塞状态:系统分配资源给进程,但是进程不一定能在CPU上运行。
2.5 进程的优先级
系统在给进程分配资源时,会根据进程使用的频率优先给使用频率高的进程分配资源,每一次使用进程,系统都会记录下进程的使用次数。
2.6 进程的上下文
进程执行过程中并不是每次都能一次执行完成,当遇到进程中断时,就需要保存进程的上下文,将进程的一些属性(如:PID,PC,内存指针)从寄存器读取后存放在内存中,当需要再次执行进程时,从内存中读取相关属性重新存放到寄存器中。
2.7 进程的记账信息
每一次进程的执行系统都会统计,当系统发现一些进程长时间未被执行时,系统就会向该进程分配多一些资源,去执行该进程。
3.线程
线程可以理解为一个执行流,不同的线程按照各自的顺序执行各自控制的模块,多个线程控制着多个模块。

3.1 为什么需要线程?
1)并发编程的需要;单核cpu的算法遇到瓶颈,无法满足同一个时刻执行多个线程,而在多核心的情况下并发编程可以解决这种问题;
2)在进行读取操作时有时会有等待时间,可以在等待时间内执行其他的线程,提升资源利用率;
3)线程的创建,销毁,执行都比进程轻量级;
3.2 进程与线程的联系与区别
1)进程是系统进行资源分配的最小单位,而线程是系统进行调度的最小单位;
2)进程至少包含一个线程(main线程);
3)进程与进程将的资源是相对独立的,不会占用彼此的空间,当一个进程出现执行错误,通常不会影响其他进程,而同一个进程内的线程是占用同一内存空间的,当一个线程出现执行错误,可能导致进程内的所有线程都执行出错。
更多推荐


所有评论(0)