线程和进程

线程和进程的区别:

1、进程是资源分配的最小单位。进程是执行的最小单位。

2、每个进程有独立的代码和数据空间、进程间切换开销较大。但是比较壮硕,一个进程崩溃不会影响其他进程。线程可以看作轻量级的进程,同一个进程内的线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器。线程间切换开销小。但是一个线程崩溃会导致整个进程崩溃。

有一个形象的比喻。进程就像一列火车,线程是一个车厢。

一个进程可以包含多个线程(火车有多个车厢)。

进程间切换开销较大,线程间切换开销较小(一列火车上的乘客很难换到另一列火车上,乘客很简单就可以从一个车厢换到另一个车厢)

一个进程崩溃不会影响到其他进程,一个线程崩溃会导致整个进程崩溃。(一列火车出问题不会影响到其他火车,一节车厢出问题,整个火车都要停下来)

多进程和多线程的优缺点

多进程的优缺点:进程比较壮硕,一个进程出问题不会影响其他进程。但进程间切换开销较大

多线程的优缺点:线程间切换开销小。但是一个线程崩溃会造成整个进程崩溃

线程间同步方法:

1、互斥锁。互斥锁用于保护临界区,确保同一时间只有一个线程可以访问临界区。

2、条件变量。条件变量需要和互斥锁配合使用。条件变量用来挂起一个线程直到条件被满足为止。为什么会有条件变量:因为互斥锁上锁后一个线程在来访问临界区时,线程就会被阻塞等待,互斥锁会循环的判断锁是否解开这样增加了CPU的负担。而条件变量是当条件不满足时线程会被挂起,等条件满足后再继续执行。

3、读写锁。读写锁和互斥锁类似。但是读写锁有三个状态:1.读模式下加锁(所有试图以读模式对其进行加锁的线程都可以获取访问权)。2.写模式下加锁(所有适度以写模式对其进行加锁的线程都会被阻塞,直到所有线程释放读锁)。3.不加锁状态。

4、信号量。信号量是一个计数器,用于多线程对共享对象的访问,若信号量为正值则进程可以使用该资源,进程将信号量减一表示一个线程正在使用,若信号量为0则进程进入休眠状态,直到信号量不为0,若一个进程不再使用该资源则信号量加一。如果有线程正在等待则唤醒他。

进程间通信方法:

上述提到的互斥锁、条件变量、读写锁、信号量都可用于进程间同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxz520zmg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值