文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall算法
进程
:程序的执行实体,操做系统分配资源的最小单位;segmentfault
线程
:被称为轻量级进程,是CPU调度分配的最小单位。一个标准的线程由线程ID,程序计数器(PC),寄存器集合和堆栈组成;安全
Linux进程间通讯:管道,信号(signal),消息队列(Message),共享内存(shared memory),信号量(semaphore),套接口(socket)
Linux线程间通讯:互斥量(Mutex),信号量(Semaphore),条件变量多线程
Windows进程间通讯:管道(pipe),消息队列(Message),共享内存(shared memory),信号量(semaphore),套接口(socket)
Windows线程间通讯:临界区(critical section),互斥量(Mutex),信号量(Semaphore),事件(Event)socket
线程是独立调度的基本单位,进程是拥有资源的基本单位(进程只做为除CPU以外系统资源的分配单元,线程做为CPU的分配单元);
在同一进程中,线程之间的切换不会引发进程的切换,但从一个进程中的线程切换到另外一个进程中的线程时,会引发进程的切换;spa
进程建立和撤销时,系统开销远大于线程开销;
进程切换时,保存现场开销和上下文切换开销远大于线程开销;操作系统
进程之间的地址空间互相独立,一个进程崩溃不影响其余进程;
线程之间(属于同一进程)共享进程的地址空间,一个线程死掉至关于整个进程死掉;线程
进程间通讯须要借助操做系统;
因为线程共享进程的地址空间,所以线程间同步与通讯较容易实现,甚至无需操做系统干预;code
死锁产生必须同时知足如下四个条件:接口
互斥条件:一段时间内,某资源仅被一个进程所占有,其余进程只能等待;
不剥夺条件:进程拥有的资源只能由本身释放,不可被其余进程强行夺走;
请求和保持条件:在申请资源不能所有知足的条件下,进程占有已申请的资源,等待新的资源分配
循环等待条件:存在系统资源的进程循环等待链;
预防死锁:任意破坏死锁产生的四个必要条件之一便可;
避免死锁:在资源动态分配过程当中,采用某种算法(好比银行家算法)防止系统进入”不安全状态“(系统有可能死锁);
死锁检测和解除:经过系统检测机制及时检测出死锁现象(利用资源分配图),而后可经过剥夺资源,撤销进程和回退进程解除死锁;