多进程与多线程的优缺点

时间:2022-11-24 16:43:41

多线程优点:

无需跨进程边界;
程序逻辑和控制方式简单;
所有线程可以直接共享内存和变量;
线程方式消耗的总资源比进程方式好;

多线程缺点:

每个线程与主程序共用地址空间,受限于2GB地址空间;
线程之间的同步和加锁控制比较麻烦;
一个线程的崩溃可能影响到整个程序的稳定性;
到达一定的线程数程度后,即使再增加CPU也无法提高性能;
线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

多进程优点:

每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加CPU,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

多线程缺点:

逻辑控制复杂,需要和主程序交互;
需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
多进程调度开销比较大;

综合

在Linux系统中,当不同的任务需要大量的共享数据或频繁通信时采用多线程,其它情况采用多进程。一个生活上的实例来理解多进程多线程。如需要做饭,首先会将米洗好拿去煮,在煮的过程中人还一边做其它的事情,如洗肉切肉等。人还是一个人,但同时处理多件事情,这大大地提高了效率。使用多进程多线程时,cpu还是需要同样多的时间来完成同样的任务,但多进程多线程能够让cpu穿插地处理各个事件,在某些情况下能够提高了执行效率。
并不是说所有情况下用多进程多线程都是好事,因为多进程多线程的情况下,CPU还要花时间去维护,CPU处理各进程线程的请求时在进程线程间的切换也要花时间,所以一般情况下是可以不用多进程多线程的,用了有时反而会得不偿失。大多情况下,要用到多进程多线程的主要是需要处理大量的IO操作或处理的情况需要花大量的时间等等,比如:读写文件、视频图像的采集、处理、显示、保存等。