1.以前的windows16位系统系统只有一个执行流,当有一个程序在占用的情况下其他程序会停止执行。这就是相当于执行了一个打印操作,然后系统就不能用了。必须要等待打印完成才能使用
2.后台有了WIndowsNT系统引入了进程的概念,程序和程序之间是隔离的,当一个程序死掉的时候不会影响其他程序
引入了线程的概念,进程(程序)执行不在相互影响
线程相当于物理CPU进行虚拟化,形成所在进程的专用逻辑CPU
线程上下文的切换
windos任何时刻只将一个线程分配给cpu。那个线程能运行一个‘时间片’的长度。时间片到期,windos就将上下文切换到另一个线程。内次上下文切换都要求windos执行一下操作:
将cpu寄存器的值保存到当前正在运行的线程的内核对象的一个上下文结构中(其实就是将上一个线程的值保存下来)
从现有线程集合中选出一个线程供调度
将所选线程上下文结构中的值加载到cpu寄存器中
说明:
windos上下文切换到另一个线程时,会产生一定的性能损失
当一个时间片结束时,如果windows确定再次调度同一个线程(而不是切换到另一个线程),将不会执行上下文切换
当前程要进行等待I/O操作时(键盘,鼠标,文件,网络等),该线程在任何cpu上都不在调度,因此不会消耗cpu时间
windows线程和clr线程是相等的
前台线程和后台线程
一个进程中所有的前台线程停止运行时,CLR强制终止在运行的任何后台线程
应用程序主线程通过Thread对象显示创建的任何线程默认都是前台线程
线程池中的线程默认都是后台线程
前台线程和后台线程可以相互转换
编码: