一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
概念理解·进程、线程、串行、并发以及并行
1. 进程
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。因此,我们可以将一个应用程序看成是一个进程。
2. 线程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
当一个线程任务在执行时,又创建了一个新的线程任务。那么我们称这个新的线程任务为子线程,而负责创建新的线程任务的线程任务则是主线程。主线程与子线程的关系是相对的。
主线程与子线程的生命周期各自互相独立。当主线程与子线程都在执行各自的线程任务时,其二者的结束时间并无联系。即主线程的线程任务完成时,不会影响子线程执行其线程任务;子线程线程任务完成时,也不影响主线程执行其线程任务。
子线程需要依赖于主线程才能进行创建,因此当我们需要进行多线程编程的情况下,我们就需要在主线程中创建一定数量的子线程。
3. 时间片轮转调度
分时操作系统是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统。其主要特点是有效地增加资源的使用率。
时间片是分时操作系统分配给每个正在运行的进程微观上的一段处理器时间。虽然一台计算机通常可能有多个处理器核心,但是同一个处理器核心永远不可能真正地同时运行多个任务。在只考虑只有一个处理器核心的情况下,这些进程看起来像同时运行的,实则是轮番穿插地运行,由于时间片通常很短,用户不会感觉到。
我们现在所用的Windows或Linux操作系统,一般都称为多任务操作系统。也就是系统允许同时运行多个应用程序。
而系统之所以能同时运行多个应用程序,就是依靠时间片轮转调度算法,让处理器为不同的应用程序分配时间片,并且不同的应用程序之间来回切换运行。
为了实现轮转调度,系统把所有就绪的应用程序按先入先出的原则排成一个队列。新来的应用程序加到就绪队列末尾。每当对应用程序进行调度时,应用程序调度程序总是选出就绪队列的队首应用程序,让它在处理器上运行一个时间片的时间。当应用程序用完处理器分给它的时间片后,操作系统的计时器发出时钟中断,调度程序便停止该应用程序的运行,并把它放入就绪队列的末尾。然后,处理器继续运行就绪队列的队首应用程序,同样也让它运行一个时间片,如此往复。
4. 串行
串行即表示一个处理器核心在一个时刻只能处理一个线程。
5. 并行
当电脑拥有多个处理器核心的时候(在这里我们假设此处理器具有2个核心),当第1个处理器核心在处理线程任务的时候,同一时刻第2个处理器核心在处理另外的线程任务且这两个线程并不互相抢占系统资源。
6. 并发
并发是指在同一个时间段之内,多个线程任务可以一起被同一个处理器核心处理,其线程任务的执行主要依赖于操作系统中的时间片轮转调度算法。
- 并发与并行关系图