本文主要说明多进程与多线程优缺点的比较,以及使用场景的不同。
I、进程与线程的区别
对于这个问题最直观暴力的回答应该是,进程是系统资源分配的基本单位,而线程是CPU调度的基本单位;操作系统层面看到的是进程,而CPU层面看到的应该是线程。
其他的区别其实都是衍生于以上描述:
1、 进程间是独立的,拥有自己的内存空间,上下文环境;而线程从属于进程,共享进程内存,不过线程拥有自己的栈空间。
2、 线程的上下文切换比进程快得多。
3、 进程强调的是通信,而线程之间强调的是同步。
II、多进程多线程之间的选择
根据进程与线程之间的特点,具体问题具体分析判断该使用哪种方式。
1、如需频繁的创建和销毁使用线程(因为线程创建和销毁简单);
2、如需进行大量计算优先使用线程(因为CPU会频繁切换);
3、多机分布使用进程;多核分布使用线程;等等。
下表详细对比了多进程与多线程之间的不同:
对比维度 | 多进程 | 多线程 | 对比结果 |
---|---|---|---|
数据共享与同步 | 数据共享复杂,需要IPC通信完成;数据是分开的,同步简单 | 因为数据共享自进程,数据共享简单,但需要完成很多同步工作 | 各有千秋 |
内存、CPU | 占用内存多,切换复杂,CPU利用率低 | 占用内存少,切换简单快速,CPU利用率高 | 线程占有 |
创建销毁、切换 | 创建与销毁速度慢,切换复杂 | 创建销毁简单,切换快速 | 线程占优 |
编程、调试 | 编程简单,调试简单 | 编程复杂,调试复杂 | 进程占优 |
可靠性 | 进程间不会相互产生影响 | 一个线程挂掉可能导致整个进程over | 进程占优 |
分布式 | 多机使用多进程 | 多核使用多线程 | 各有优势 |
III、 进程切换比线程切换慢的原因
1、进程切换分为两步:切换页目录使用新的地址空间;切换内核栈和硬件上下文;
2、线程和进程最大的区别就在于地址空间;对于线程切换,第一步是不需要做的,因为多线程所用的地址空间时相同的。
3、另外在对进程切换的时候,会有扰乱处理器的缓存机制(原进程的缓存作废)。而多线程之间的切换不存在这个问题。
欢迎转载,转载请注明出处wenmingxing 多进程 vs 多线程