1.4.1 多线程多线程一般指通过技术手段在具体项目中开启两个或两个以上线程,以一起执行任务。在Python中也是如此,我们可以通过Python提供的线程相关的类库在Python项目中开启多线程,比如使用Threading库等方式,这一点会在本书的高并发篇进行详细介绍。通过开启两个或两个以上线程,计算机可以异步或并发执行Python任务。通过该技术手段,Python任务得到充分执行,可以使CPU可以充分地发挥作用,不再因为等待任务的执行而延长CPU等待执行任务的时间。
1.4.2 多进程多进程一般指通过技术手段,将同一个项目拆分成不同的进程来一起运行项目的现象。这种技术目前只有一些理论内容,并没有实际的产出,因为这种理论在正常情况下实现起来还是有一定难度的,所以本书不做过多介绍。
1.4.3 单线程单线程指的是项目自始至终只有一个线程负责执行任务。这种单线程执行任务的方式在比较简单的场景中比较适用,但是,一旦项目具备一定的业务逻辑或者有计算要求,再采用单线程的方式去处理任务就不是很合适了。试想一下,一个线程正在执行一个比较耗时的计算任务,而后续代码需要这个计算任务的结果才能继续向下执行。此时,由于只有一个线程执行,所以不得不等待该线程执行完后才能继续执行后续的业务逻辑,这一等待过程会直接反映到用户层面,即用户在使用该项目时会感知到明显的等待时间,这会给用户带来不好的体验。
为了避免上述现象出现,我们不得不在项目中采用多线程的方式进行优化,但是,使用多线程来对项目进行优化就一定好吗?
1.4.4 多线程的优势与不足任何事物都具有两面性,多线程亦是如此。在通过多线程来优化项目时,我们不得不反思使用多线程会不会给项目增加其他的负担。答案是一定会。
对于CPython虚拟机来说,多线程是通过切换线程上下文而实现的。而每一次线程上下文切换,都会带来一定的时间开销,都需要CPython虚拟机去等待执行,这也是使用多线程处理任务必须要花费的时间成本。除了时间成本,在Python项目中将具体代码优化成线程安全的常用手段还是加锁,而一旦给代码解锁,就会带来线程间对于临界区资源的竞争,一旦存在资源的竞争,线程之间就会等待获取锁,从而获取线程所需的资源,这其中也需要一定的时间成本。如果开发者不懂如何给代码加锁,从而乱用各种锁,这对于代码本身就不是一件正常的事情,大概率也不会实现线程安全,只会让结果变得更糟。
综上所述,我们只有在具备一定的多线程应用能力之后,才能对Python代码进行优化,这样才能发挥多线程的优势。而实现多线程的每一种技术手段都需要读者潜心钻研、自我总结。
---------------------------------------------------------------------------------
学习更多专业Python知识,点此查看:
---------------------------------------------------------------------------------