进程
VS
线程
?
优缺点
?
使用场景
?
首先进程是
资源分配
的最小单位,线程是
任务调度
的最小单位;进程比线程
更健壮
,
每个进程拥有
独立
的地址空间,一个进程的崩溃不会影响其他进程、而线程之间
共享
地址
空间,一个线程的崩溃可能影响其他线程或者整个程序;由于线程的调度必须通过
频繁加
锁
来保持同步,
线程的性能比进程低
;但线程之间切换比进程之间
切换开销
少,
成本低
;
在需要
频繁
创建销毁
或者需要进行
大量计算
的优先用
线程;
高性能
交易服务器中间
件,如
TUXEDO
,都是主张多进程;总的来说
强相关的处理用线程,弱相关的处理用进
程;多机
分布的用进程,
多核
分布的用线程
进程优点:性能高(每个子进程都有
2GB
地址空间和相关资源,总体能够达到的性能上限
非常大)、进程间相互独立,一个进程崩溃了不会影响其他进程、通过增加
CPU
,就可以
容易扩充性能;、可以尽量减少线程加锁
/
解锁的影响,极大提高性能,就算是线程运行的
模块算法效率低也没关系;
缺点:成本高,开销大;逻辑控制复杂,需要和主程序交互;需要跨进程边界,如果有大
数据量传送,就不太好,适合小数据量传送、密集运算
线程优点:成本低,开销小;程序逻辑和控制方式简单;创建速度快,方便高效的数据共
享
(
一
个线程的数据可以直接为其它线程所用
)
;线程方式消耗的总资源比进程方式好;
缺点:性能低:每个线程与主程序共用地址空间,受限于
2GB
地址空间;线程之间的同步
和加锁控制比较麻烦;一个线程的崩溃可能影响到整个程序的稳定性;
到达一定的线程数
程度后,即使再增加
CPU
也无法提高性能。
线程的同步方式有哪些
?
及作用
?
线程同步作用:
线程的资源保护机制
:
互斥锁、条件变量、信号量
互斥锁:
互斥锁是一种简单的加锁的方法来
控制对共享资源的访问
,
一旦获取,就会上
锁,且只能由该线程解锁,期间,其他线程无法获取
优点:使用简单
缺点:
重复锁定和解锁,每次都会检查共享数据结构,浪费时间和资源;
繁忙查询的效率非常低
信号量:
互斥锁使用对同一个资源的互斥的方式达到线程同步的目的,信号量
可以同
步多个资源以达到线程同步
(
pv
操作)
优点:信号量允许多个线程同时进入临界区(互斥锁只允许一个线程进入临界区)
条件变量:
当线程在等待某些满足条件时使线程进入睡眠状态,一旦条件满足,就唤醒,
这样不会占用宝贵的互斥对象锁,实现高效,从而
实现线程同
步。
优点:
解决互斥锁浪费资源且效率低的缺点。(
条件变量需要在互斥锁的配合下才能工
作
)