目录
一、线程与进程的区别
1、线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。
2、进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
区别:
1、根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
2、资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。总结:进程资源开销>线程资源开销
3、内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。
4、影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
5、执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。
二、多进程和多线程区别
多进程:操作系统中同时运行的多个程序
多线程:在同一个进程中同时运行的多个任务
三、进程与程序的区别
进程与程序最大的区别就在于进程是动态的,同一个静态的程序可以对应多个不同的动态进程。例如:同一个QQ程序可以形成多个动态的QQ进程
三、死锁
1、是什么
多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进,程序没有办法进行正常终止
2、产生的原因
(1)竞争不可剥夺资源
(2)竞争临时资源,通常消息通信顺序进行不当,则会产生死锁
(3)进程推进顺序不合法:进程P1 P2此时各自获得资源A B,但是,P1需要得到B后再释放资源,P2需要得到A后再释放资源,此时系统不安全。如果再进行推进,就会死锁
【拓】资源的分类:①可剥夺资源:当一个进程获得资源后,该资源可被其他进程或者系统剥夺 ②不可剥夺资源:当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,③临时资源:包括硬件中断、信号、消息、缓冲区内的消息等
3、产生的必要条件(4个)
(1)互斥使用:二者只能有一个使用资源
(2)不可抢占资源:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放
(3)占有且等待:当进程因请求资源而阻塞时,对已获得的资源保持不放
(4)循环等待:进程一等待进程二占有的资源,进程一等待进程二占有的资源,这样形成一个环路
死锁只有这4个条件都满足时才发生
4、如何预防
关键:破坏任意一个必要条件即可
破坏互斥使用:一次性分配所有资源,这样就不会再有请求了。(一般不会对互斥使用进行破坏,因为某些资源只能一个进程使用,其他进程不能使用,例如打印机。所以会对其他3个条件进行破坏。)
破坏占有且等待:每个进程一次性申请所有需要的资源,如果无法获取所有资源,就等待;如果可以获取所有资源就继续执行任务
破坏不可抢占资源:当某个进程拿到一部分资源,想要申请其他资源时,如果申请不到则主动释放原占有的所有资源
破坏循环等待:给每个资源都标记一个序号,按序申请,先申请资源序号小的在申请资源序号大的,这样线性化申请资源就不会出现循环等待的问题
5、如何避免
银行家算法
6、如何检测
为每个进程和每个资源指定一个唯一的序号,然后建立资源分配表和进程等待表
7、如何解除
(1)剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态
(2)撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态消除为止。所谓代价是指优先级、运行代价、进程的重要性和价值等