进程与线程的一个简单解释(进程,线程,互斥锁,信号量,操作系统的设计)
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
进程与线程的区别
1、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
2、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。
3、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
https://www.jianshu.com/p/2dc01727be45
死锁:是一个进程集合中的多个进程因为竞争资源,而造成的互相等待现象。
产生死锁的原因主要是:
1、因为系统资源不足。
2、 进程运行推进的顺序不合适。
3、 资源分配不当等。
死锁的必要条件:
1、互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
2、请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
3、剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
4、 循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。
死锁的预防
死锁的预防是保证系统不进入死锁状态的一种策略。它的基本思想是要求进程申请资源时遵循某种协议,从而打破产生死锁的四个必要条件中的一个或几个,保证系统不会进入死锁状态。
死锁的避免
在资源分配过程中若预测有发生死锁的可能性,则加以避免。主要有安全序列,银行家算法。
死锁的检测与恢复
检测:常利用资源分配图、进程等待图来协助这种检测。
恢复:重新启动;撤销进程,剥夺资源。