进程、线程与CPU

前言

关于进程、线程及串行、并行等概念,我们很有可能感到混淆难辨,因此将一些相关概念记录在此,以备不时之需。

本篇博客包含CPU调度、单核与多核、进程与线程、串行并行与并发、同步与异步、Python的多线程与多进程、等内容。

CPU调度

CPU调度的任务是从就绪队列中选择一个等待进程,并为其分配CPU。CPU由调度程序分配给所选中的进程。换句话说,CPU调度可以让CPU在进程之间交替执行,看起来就是在同时执行一样。CPU调度的目的之一就是为了让CPU的一个核心可以“同时”运行多个进程,也就是后文提到的并发

另外,CPU调度可以提高计算机CPU的利用率,从而使计算机的运行更加高效。

单核与多核

一个处理器(CPU)拥有的运算核心的数量,可以区别CPU是单核还是多核。
同一时刻,CPU的每个核心都可以运行1个线程。单核和多核CPU的区别就是同一时刻可以运行几个线程,单核CPU只能运行一个,N核可以运行N个。

值得一提的是,单核CPU也可以“同时”运行多个线程。不过这个“同时”只是一种假象,因为本质上单核CPU不能同时运行多线程。它的运行原理便是前文提到的CPU调度,在不同时间片内运行不同线程,由于每个时间片很短所以看起来是多个线程同时进行的,这也是所谓的并发

进程与线程

进程
进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。

线程
线程是CPU调度的基本单元。一个进程可以有多个线程。

联系
运行一个程序就会开启一个进程,一个进程可以有多个线程,一个线程只能属于一个进程。

串行、并行与并发

串行
指多个任务时,各个任务按顺序执行,完成一个任务之后才能执行下一个任务。

并行
同时处理多个任务的能力,要求不同任务(即代码块)同时执行。

并发
拥有处理多个任务的能力,不一定要同时,不同任务间可以交替执行。可以串行处理也可以并行处理,原理是CPU调度。

同步与异步

同步
指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去。。

异步
指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

对象
同步、异步是对于线程而言的。同步,不开启新线程;异步会开启新线程。
串行、并行是针对任务来说的。串行就是任务一个一个按顺序做,并行就是多任务同时进行。

举例
同步:我去叫朋友吃饭,朋友听到了会和我说“好的”,然后我们一起去吃饭;如果朋友没有听到,我就会一直叫他,直到他听见并和我一起去吃饭。
异步:我去叫朋友吃饭,然后我就去吃饭了,而不管朋友是否会和我一起去吃饭。

Python的多线程与多进程

Python中的多线程实质上是对上下文的不断切换,可以说是假的多线程,适合IO操作密集的任务(因为IO操作不占用CPU)。

那么使用Python如何进行真正的多线程呢,可以利用多核CPU和Python的多进程,为每个核心启动1个进程,再为每个进程创建1个或多个线程即可。

如何实现
Python多线程需要使用threading包。
Python多进程需要用到multiprocessing包。
详情可参考W3CSchool网站的教程:Python编程之线程与进程

猜你喜欢

转载自blog.csdn.net/NSJim/article/details/123044668