大家好,我是小白太白。
上期内容分享了进程与线程的区别,以及什么是线程,没有看过的小伙伴可以在该系列合集中查看。
进程与线程内容主要从以下方面分享,这一期将继续分享进程有关的知识点,即本期内容分享第 3~4 部分。
进程与线程区别
线程理解及实践
进程理解及实践
使用场景的选择
进程理解及实践
进程的核心特点
资源独立:每个进程有自己的内存空间、文件句柄等,进程间不共享资源;
开销大:创建、切换进程的成本远高于线程(需分配独立内存);
并行执行:每个进程有自己的 GIL(解释见上期内容),可利用多 CPU 核心实现真并行,适合 CPU 密集型任务。
同样采取实例来帮助理解进程的作用。(建议亲手打下代码并跑下哦)
实例1:基础多进程(执行 CPU 密集型任务)
多进程利用多 CPU 核心并行计算,效率显著高于单进程,体现了进程在 CPU 密集型任务中的优势。
实例2:进程间通信(IPC)—— 队列(Queue)
进程间不共享全局变量,需通过队列、管道、共享内存等方式通信,其中 Queue是最常用的方式:
实例3: 进程池(Pool):高效管理进程
进程池顾名思义就是一个池子,里面有很多可以直接使用的进程(提前申请好了)。你只需要关注进程池操作就可以,无需关注它如何具体管理一个个单一的进程。
当需要创建大量进程时,直接创建进程会导致资源浪费。Python3.2 + 提供了 concurrent.futures 模块,封装了原有的线程池和进程池,使用 with 语句(与文件操作使用的with是一样的)自动管理池的生命周期,使用更简洁:
使用场景的选择
那么什么时候使用线程,什么时候使用进程呢?主要是从资源占用以及执行效率两方面进行考虑的。
用线程的场景(IO 密集型任务)
用进程的场景(CPU 密集型任务)
数学计算(如矩阵运算、数据挖掘);
大数据处理(如批量数据清洗、机器学习训练);
需要充分利用多 CPU 核心的任务。
总而言之,一句话概括就是:如果主要是读写文件/数据就选线程,否则(侧重计算或并行效率)就选进程。
好了,关于进程与线程相关的分享暂时告一段落了。该内容重在理解是什么,如何选择,至于后续具体使用可以随时查阅。
另外,如果你是计算机专业且还未工作的学生党,那么这些内容(与具体编程语言解耦的理解)是要求熟练掌握,因为面试必考,且工作中编码一定会用到的。
下期再见啦

PS:本人能力有限,文章内容若存在问题或其他需要改进的点,欢迎留言评论,帮助我积极改进以输出更加优质的内容回馈各位小伙伴,谢谢~