最近在读Jeffery Richter大神的著作《CLR via C#》,对线程有了更加深入的理解,故写下线程的相关知识,算是一个读书笔记。
一、线程基础
早期,OS只运行一个线程,长时间运行的任务会阻止其他任务的执行。某些程序bug会导致真个OS停止工作。故Microsoft决定使用线程来解决这些问题。
线程的职责是对CPU进行虚拟化,让你觉得CPU可以同时干多件事。每个进程都有专用的线程,程序代码进入死循环,与那个代码关联的进程会“冻结”,但其
他进程(有自己的专用线程)不会冻结,它们会继续执行!
上下文切换:Windows任何时刻只能将一个线程分配给一个CPU,那个线程能运行一个时间片的长度。时间片到期,Winodws就上下文切换到另一个线程。
每次上下文切换将严重影响性能。上下文切换本身没有任何收益。
线程开销包括:上下文切换、内存开销、时间开销(CLR花更多时间进行垃圾回收等)。
在.Net中的线程实际上是围绕Windows向开发人员公开的线程处理功能展开的。
后台线程:一个进程的所有前台线程停止运行时,CLR强制终止仍在运行的任何后台线程。
线程池:CLR初始化时,线程池中没有线程。当程序执行一个异步操作时,线程池就创建一个新线程,线程任务完成不会销毁,线程会返回线程池,进入空
闲状态,等待响应另一个请求。程序向线程池发出请求,线程池会尝试只用这一个线程来处理。如果程序发出请求的速度超过了线程池线程处理它
们的速度,就会创建额外的线程。当一个线程池线程闲着没事干一段时间后,线程会自己终止自己以释放资源。故,线程池线程数量会动态调节。
二、
时间: 2024-10-12 08:33:24