线程、进程
它们描述的是任务的划分。
- 进程:计算机打开一个应用时用来执行任务的一个任务单元。
创建一个进程时,计算机会伴随着给它分配资源。
(用来计算的独立的堆栈空间、独立的数据资源)
进程的创建会占用资源,进程之间一般不会相互访问对方的资源。
- 线程:是进程下的小任务单元。
创建了一个线程时也会对应分配资源。
(用来计算的独立的堆栈空间、进程下的数据资源)
线程执行任务时也会占用资源,但是通过调度,线程与线程间资源是共享的。
相互关系: 进程中可以只有一个线程,也可以有多个线程。
简单的想,进程线程关系如下,从左到右可以是一对多的关系。
应用——进程——线程——指令
先有 进程的概念,负责资源分配和任务调度。
后来发现执行多任务时,创建一个新进程的开销太大,所以细化引入了线程的概念。
由线程分担了任务的调度,进程下的线程共享进程分配的资源。
同步、异步
它们描述的是控制方式。
-
同步:控制方式,要求一件事情不做完,就不能做下一件。
狭义上讲就是纸计算机给进程指令,上一个不执行完,后边的就排队等着吧。
- 异步:控制方式,要求一件事情开始做,不用等它昨晚,可以继续它后边的事情了。
相互关系:同步和异步是发生在一条线上的先后任务,即任务本来串行的关系,
选择同步还是异步根据需要,是一种控制方式的选择。
串行、并行和并发
它们描述的是任务执行的顺序关系。
- 串行:任务的排列是前后顺序的,每件事情是先后顺序排列的。
- 并行:任务的时间线是同时的,每件事情都在进行着。
-
并发:任务的排列是在同一时间发生的,几件任务通过调度穿插执行,最后完成即可,
典型应用于流水线作业。微观上是串行的,宏观上认为是并行的。
相互关系:和同步异步的概念会有交叉,但使用场景不一样
并行并发是操作系统对任务顺序本身处理调度的描述
同步异步是开发环境主动选择的控制手段的描述
扩展
上述理论概念只是一种思维模式,可以应用在各种场景。
其目的就是充分利用资源,不让它们闲置下来,达到高效节约的目的。
例如,CPU的单核同一时间仅能处理一个任务,即串行模式。
因为它处理特别快,多个任务并发进行的时候,感觉像是在同时进行。
后来有了多核技术,才实现真正的并行。
英特尔的超线程技术,也是应用这个概念模式,在单核上增加一套必备的核心新路,
和原来的共用一部分线路,减少线路闲置,实现单核的双线程。