线程的一些概念

  • Post author:
  • Post category:其他




  • win32线程API



  • 进程、线程概念



进程



线程





(






多线程中栈私有, 堆公有)




概念



资源的最小单位



操作系统的最小调度单位



通信(或同步)



信号、信号量、消息队列、共享内存



临界区、互斥量、信号量、事件



差别



线程是指进程内的一个执行单元,也是进程内的可调度实体.





与进程的区别:





(1)




调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位





(2)




并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行





(3)




拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.





(4)




系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。



程序什么时候应该使用线程,



什么时候单线程效率高



1




.耗时的操作使用线程,提高应用程序响应





2




.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。





3




.多CPU系统中,使用线程提高CPU利用率





4




.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。





其他情况都使用单线程。



  • 死锁



什么是进出死锁



死锁就是两个或多个进程无止境地等候着永远不会成立的条件的一种系统状态。在两个或多个并发进程中,如果每个过程持有某中资源而又都等待着别的进程释放它或他们现在白吃的资源,否则就不能向前推进。



进程死锁的原因



  1. 资源竞争(或系统资源不足)



  2. 进程推进顺序非法



产生死锁的4个必要条件



互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。



请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。



非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。



循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。



(①




互斥条件②不剥夺条件③部分分配(请求保持)④环路条件)



解决死锁策略



1.




忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。



2.




检测死锁并且恢复。



3.




仔细地对资源进行动态分配,以避免死锁。



4.




通过破除死锁四个必要条件之一,来防止死锁产生。

待定…



版权声明:本文为xhamigua原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。