事情起因
究竟是什么原因让某高校大学生深夜不寐,去学习多线程与多进程呢?
还是因为我在程序接单群接到了这样一单,如下:
题目挺简单的,但是做到最后,发现程序运算量很大,想着可不可以写成多线程的方式去执行,这样时间就能节省很多了。
后来写成多线程的方式,发现运行时间竟然比单线程还长。。。(擦汗,后来发现是因为join),然后了解到有多进程这个东西。
曾经的我认为多线程天下无敌,可以解决一切问题,但是今天才知道。。。唉,我就是个眼界低下的小渣渣
我们先大体来看看两者有什么区别吧。
两者de特点
功能 | 多线程 | 多进程 |
---|---|---|
操作全局变量 | 共享简单;同步复杂 | 共享复杂,同步简单 |
IO密集操作 | 效率高 | |
计算密集操作 | 效率高 | |
内存、CPU | 占用内存少,切换简单,CPU利用率高 | 占用内存多,切换复杂,CPU利用率低 |
可靠性 | 一个线程挂掉将导致整个进程挂掉 | 进程间不会相互影响 |
分布式 | 适应于多核、多机分布 ; | 适应于多核分布 |
两者联系
进程:一个正在执行的程序,它是资源分配的最小单位
线程:有时又称轻量级进程,程序执行的最小单位,系统独立调度和分派CPU的基本单位。
两者都是完成多任务的方式。
一个进程默认有一个主线程,一个线程可以包含多个线程
鱼还是熊掌:浅谈多进程多线程的选择
关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。
简单来说:
- IO密集操作使用多进程
- 计算密集操作使用多进程
为什么很多情况不用线程?
通常情况下是因为效率不高
实际操作对比发现,单线程10分钟任务,多线程花费8分钟,多进程花费5分钟。