一、并发相关基础概念

1.并行与并发

并发性和并行性是既相似又有区别的两个概念。并行是指两个或多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。

举个形象的例子:把计算机看做一个加工食品的工厂,CPU 是工厂中的机器,不同的事件当做不同的加工原料。并行就是有多个机器在同一时刻同时加工不同的原料,因此并行是需要硬件条件支持的。而并发是在只有一台机器的情况下,按照一定的加工次序,比如甲原料加工1分钟,再换成乙原料加工2分钟。

从宏观上看,在一段时间内这些原料是一起加工的;从微观上看,这些原料是交替进行加工的,这就是所谓的并发。而这些事件(程序)在 CPU 中的执行过程,就称之为进程。

2.进程状态转换

在进程运行过程中,由于系统中多个进程的并发运行以及彼此之间的相互制约,使得进程状态不断地发生改变。比如当一个进程使用 CPU 时,其他进程就必须等待该进程。通常,一个运行中的进程可以划分为下图所示的 5 种基本状态:

一、并发相关基础概念

 在从就绪态状态到执行状态的过程中,涉及到了进程的调度算法,来决定就绪队列中的哪个进程进入 CPU 被执行。调度算法分为抢占式和非抢占式,常见的调度算法有:先来先服务(FCFS)、短作业优先(SJF)、时间片轮转以及各种抢占式的调度算法,Java 中就采用了抢占式的调度算法。

 3.线程

线程是进程内的执行单元,进程中的所有线程共享进程的资源,但却不能脱离进程独自运行。引入线程的目的就是为了减少并发执行的时空开销,使具有更好的并发性。进程中的一个线程阻塞,并不影响整个进程的运行。

一、并发相关基础概念

 

 4.进程(线程)的同步与互斥

进程的互斥是指同一时刻同一资源只能由一个进程使用。这种不能被同时访问的资源称为临界资源,如打印机;而访问临界资源的代码则称之为临界区。

进程的同步是指进程间要彼此交流信息控制所有进程的协同运作,某一进程若收不到另一个进程的必要信息就不能继续运行下去。比如果盘里必须先放入水果才能再取出水果,如果果盘里没有水果就不能够取出水果。