python语言基础-6 多任务-6.0 基本概念
声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。
6.0 基本概念
6.0.1 多任务的场景
前面我们学习的代码示例通常都是单任务的,即每个步骤之间都是顺序执行的。但实际中也有很多时候是多任务的,例如:生产汽车,各部分零件同时生产,最后集中在一起组装。这个过程中不会按次序生产轮子、发动机、底盘、外壳及其他零部件,而是这些零件同时开工生产,有的事件之间有先后次序,有的事件之间是无关的。
完成一个任务的执行平台称为流水线。一个流水线只能按次序完成一个任务的流程,那么多条任务同时执行就需要多条流水线同时开工。
6.0.2 并行与并发
并行与并发是执行多任务的两种方式。
并行:指多条任务同时执行。就像多条生产线同时开工生产。计算型的任务由于多数中间过程与结果之间存在严格的次序关系,通常使用并行。
并发:指多条任务同时发起,并不严格同时执行。就像一个工人来回切换地执行多条流水线。IO型的任务通常使用并发,使较慢IO任务让出资源,优先完成较快的任务。
6.0.3 进程、线程与协程
根据任务拆解的不同层次,任务下可能有一个到多个子任务,子任务下也可以有一个到多个子任务。而执行任务的流水线也是像这样分层次的。计算机执行任务的流水线就是进程、线程与协程(python中使用的),它们就是不同层次的流水线。
进程(Process):进程是计算机中的一种计算资源分配单位(即执行任务的流水线)。计算机中一个应用程序的启动运行,至少占用一个进程。典型的比如网络应用中,一个端口号通过对应一个进程号。在C和java中执行一个程序通常以main函数为入口,因此main函数通常也是开启进程的标志。
线程(Threading):线程是进程下进一步划分的计算资源分配单位(即执行任务的流水线)。运行一个进程时,进程下至少包含一个线程,并且如果进程下只有一个线程时,这个线程通常就是主线程main。多线程的情况比如:我们运行一个程序,将网络上的文件保存到本地并添加一条记录到本地记录表中,就可以让主线程保存文件的同时,再开启一个线程执行将记录保存到记录表的操作。
协程(Coroutine):被称为微线程,是单个线程内的上下文切换执行技术,其实就是通过一个线程实现代码块相互切换执行。协程是python中的一种机制,C和java中是没有的。
由进程、线程与协程的定义可知,进程与线程是可以被调度来做并行或并发的,而协程只能调度做并发而不能做并行。
