赞
踩
“进程——资源分配的最小单位,线程——程序执行的最小单位”
1.单进程单线程:一个人在一张桌子上吃饭。
2.单进程多线程:多个人在同一张桌子上一起吃饭。
3.多进程单线程:多个人每个人在自己的桌子上吃饭。
多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜(共享资源),一个人刚伸出筷子,结果发现已经有另一人在夹菜了,此时他就要等另一个人夹完菜之后才可以夹菜,也就是说在同一张桌子上有多个人吃饭就不可避免会发生争抢。
多进程每个人都有自己的一道菜,就不会同时争抢一道菜。但是另一个问题随之而来。每个人开一张桌子消耗就会较大。开桌子(创建进程)的消耗也因饭店(操作系统)的不同有所区别: 对于Windows来说,开桌子的开销是很大的,因此Windows鼓励大家在一张桌子上吃饭。Windows多线程学习的重点是面对资源争抢与同步方面的问题。对于Linux来说,开桌子的开销很小,因此Linux鼓励大家尽量每个人都开一张自己的桌子吃饭。这带来新的问题,坐在两张不同的桌子上,说话不方便,因此Linux下的学习重点是进程间通讯的方式。(PS:两者的开销相差一百倍左右)
我们按照多个不同的维度,来看看多进程和多线程的对比(注:都是相对的,不是说一个好得不得了,另一个差的无法忍受)
维度 | 多进程 | 多线程 | 总结 |
---|---|---|---|
数据共享同步 | 共享复杂需要IPC;同步简单 | 共享简单;同步复杂 | 各有优势 |
内存、CPU | 占用内存多,切换复杂,CPU利用率低 | 占用内存极少,切换简单,CPU利用率高 | 线程占优 |
创建、销毁和切换 | 创建销毁、切换复杂、速度慢 | 创建销毁、切换简单、速度快 | 线程占优 |
编程调试 | 编程调试简单 | 编程调试复杂 | 进程占优 |
可靠性 | 进程间不会相互影响 | 一个线程挂掉将导致整个进程挂掉 | 进程占优 |
分布式 | 适用于多核、多级分布;如果一台机器不够,扩展到多台机器比较简单 | 适用于多核分布 | 进程占优 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。