多进程编程和多线程编程优缺点
2023-06-13 09:12:00 时间
多进程编程和多钱程编程,都可以使用并行机制来提升系统的运行效率。二者的区别在于运行时所占的内存分布不同,多钱程是共用一套内存的代码块区间;而多进程是各用一套独立的内存区间。
对于多进程编程来说,操作系统在切换任务时,会有一系列的保护现场措施,这要花费相当多的系统资源,若任务过多,则大部分资源都被用做干这些了,结果就是所有任务都做不好; 多线程编程也不是线程个数越多效率越高,通过下面的公式可以计算出线程数量最优的一个参考值。
多进程的优点是稳定性好,一个子进程崩溃了,不会影响主进程以及其余进程。基于这个特性,常常会用多进程来实现守护服务器的功能。
多进程编程也有不足,即创建进程的代价非常大,因为操作系统要给每个进程分配固定的资源,并且操作系统对进程的总数会有一定的限制,若进程过多,操作系统调度都会存在问题,会造成假死状态。
多线程编程的优点是效率较高一些,适用于批处理任务等功能;不足之处在于,任何一个线程崩溃都可能造成整个进程的崩溃,因为它们共享了进程的内存资源池。
既然多线程编程和多进程编程各有优缺点,因此它们分别适用于不同的场景。比如说,对于计算密集型的任务,多进程效率会更高一下;而对于IO密集型的任务(比如文件操作,网络爬虫),采用多线程编程效率更高。为什么是这样呢?
其实也不难理解。对于 IO 密集型操作,大部分消耗时间其实是等待时间,在等待时间中,Python会释放GIL供新的线程使用,实现了线程间的切换;相反对于 CPU 密集型代码,2 个 CPU 干活肯定比一个 CPU 快很多。
在大型的计算机集群系统中,通常都会将多进程程序分布运行在不同的计算机上协同工作。而每一台计算机上的进程内部,又会由多个线程来并行工作。
注意,对于任务数来说,无论是多进程编程或者多线程编程,其进程数或线程数都不能太多:
对于多进程编程来说,操作系统在切换任务时,会有一系列的保护现场措施,这要花费相当多的系统资源,若任务过多,则大部分资源都被用做干这些了,结果就是所有任务都做不好; 多线程编程也不是线程个数越多效率越高,通过下面的公式可以计算出线程数量最优的一个参考值。
相关文章
- python进阶(15)多线程与多进程效率测试
- 进程调度有可抢占 哪种开销更大_什么时候用多线程什么时候用多进程
- Java中的多线程和多进程
- java多线程与高并发:LockSupport、淘宝面试题与源码阅读方法论
- redis多线程模型_js进程和线程的区别
- 并发多线程学习(一)进程与线程
- 【目标检测】YOLOv5多进程/多线程推理加速实验
- Rust语法之多线程(Tokio)
- 浅谈linux模拟多线程崩溃和多进程崩溃
- Java多线程高并发学习笔记——阻塞队列详解编程语言
- Java多线程编程总结详解编程语言
- Java多线程超详解编程语言
- 编程开启c语言多线程编程,掌握linux编程之路(c语言多线程linux)
- 用Linux C语言创建多线程程序的方法(linuxc创建线程)
- Linux下多进程多线程实现实时运算(linux进程线程)
- 优化 Linux 服务器性能的多线程技术(linux服务器多线程)
- Linux多线程编程示例——提高进程效率(linux多线程例子)
- Linux线程:构建强大多线程应用(linux线程的创建)
- 多线程架构下redis作为存储系统的实现(多线程使用redis存储)
- Redis多线程管理过期对象(redis过期 多线程)
- 用ASP开"多线程"
- 深入多线程之:Wait与Pulse的使用详解
- java基本教程之多线程基本概念java多线程教程
- c#多线程中Lock()关键字的用法小结
- 15个高级Java多线程面试题及回答
- 理解python多线程(python多线程简明教程)
- Python中多线程及程序锁浅析
- 个人对于异步和多线程的关系的理解分享