无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源,但它可以访问隶属进程的资源。即一个进程的所有资源可供进程内的所有线程共享
系统开销进程创建和撤消的开销远大于线程创建和撤消的开销
进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置
线程切换时只须保存和设置少量寄存器,并不涉及存储管理方面的操作
同一进程内的各线程由于它们拥有相同的地址空间,它们之间的同步和通信的实现也比较容易
目的进程:为了使多个程序更好的并发执行,改善资源利用率、提高系统效率
线程:为了减少并发执行时所付出的时空开销,使并发粒度更细、并发性更好
差异 进程拥有独立的地址空间:一个进程崩溃后,在保护模式下不会对其它进程产生影响
线程只是进程中的不同执行路径
有独立的堆栈与局部变量
没有单独的地址空间
一个线程死掉等于整个进程死掉
小总结多进程程序比多线程程序健壮
进程切换时耗费资源更大,效率较差
线程执行开销小,但不利于资源的管理和保护
要求同时进行又要共享某些变量的并发操作,只能用线程,不能用进程
多个线程共享内存,从而极大地提高了程序的运行效率
进程在执行过程中拥有独立的内存单元
死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源而造成阻塞的现象,若无外力作用,它们都将无法继续执行
产生原因竞争资源引起进程死锁
可剥夺和非剥夺资源
竞争非剥夺资源
竞争临时性资源
进程推进顺序不当
产生条件互斥条件:涉及的资源是非共享的
涉及的资源是非共享的,一段时间内某资源只由一个进程占用,如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放
不剥夺条件:不能强行剥夺进程拥有的资源
进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放
请求和保持条件:进程在等待一新资源时继续占有已分配的资源
指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放
环路等待条件:存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中的下一个进程所请求
在发生死锁时,必然存在一个进程——资源的环形链
只要打破四个必要条件之一就能有效预防死锁的发生
面试相关问题能力有限,这里就没有留下个人的回答了,避免带入误区,影响到读者的总结,我相信读者可以根据上文中知识点的描述,能总结出自己的结论
1.线程与进程的概念? 2.线程与进程的区别? 3.线程如何工作的? 4.进程如何工作的? 5.进程与线程是如何通信的? 6.进程/线程之间如何进行切换的? 7.线程和进程的关系? 8.什么是死锁?为什么会出现?如何避免?