我的读书笔记(线程进程)

  线程有时候可以被称为微进程或轻量级进程,它的概念和进程十分相似,是一个可以被调度的单元,并且维护自己的堆栈和上下文环境,线程是附属进程的,一个进程可以包含1个或者多个线程,并且同一进程内的多个线程共享一块内存快和资源,一个线程是一个操作系统可调度的基本单元,但同时它的调度受限于包含该线程的进程,也就是说操作系统首先决定了下一个执行的进程,进而才会调度该进程内的线程

  线程和进程最大的区别在于隔离性的问题,每个进程都被单独地隔离,拥有自己的内存快,独占的资源及运行数据,一个进程的崩溃不会影响到其他进程,而进程间的交互也是相当困难的,和进程不同,同一进程内的所有线程共享资源和内存,并且一个线程可以访问,结束同一进程内的其他线程

 

按照常规分类,线程调度可以分为抢占式调度和非抢占式调度两种方法

1)抢占式调度

  抢占式调度是指每个线程都只有极少的运行时间(在windows NT内核模式下这个时间不会超过20ms),而当时间用完时该线程就会被强制暂停,保存上下文并把运行权交给下一个线程,这样调度的结果就是所有线程都在快速地切换运行,使得使用者感觉所有的线程在并行运行

2)非抢占式调度

  非抢占式调度是指某个线程在运行时不会被操作系统强制暂停,它可以持续地运行直至运行告一段落并主动地交出运行权,再这样的调度模式下,线程的运行就完全是单队列的,并且可能产生恶意程序长期霸占运行权的情况。

  注意:现在很多的操作系统都采用抢占式和非抢占式模式,对于那些优先级相当高的线程,操作系统采用非抢占式来充分的时间运行,对于普通的线程,则采用抢占式模式来快速切换执行

 

 

  .net提供了System.Threading.Thread 类型封装了线程的操作,通过该类型,程序员可以手动地创建,查询,控制以及结束线程

  System.Threading.ThreadPool类型封装了线程池的操作,每个进程都拥有一个线程池,.net提供了线程池管理的机制,用户只需要把线程需求插入到线程池中,就不必要再理会后续的工作,所有线程池中的线程都是后台线程,他们不会阻碍程序的退出

posted @ 2014-08-01 09:46  sophiadv  阅读(237)  评论(0编辑  收藏  举报