CLR VIA C# 阅读笔记和感悟(三)

前言:如今.NetCore已经进入了2.1版本,但这本书的学习还是很重要,我们继续学习和总结,以便于在.NetCore新技术的学习上能有个对比,帮助我们学习新知识。

线程池:线程的创建和销毁都是要消耗资源的,所以微软为了优化线程的使用,提出了线程池,线程池中的线程是可重用的,在线程初始化、程序启动时,会根据CPU的核数量创建默认数量的线程,这些线程中有一个主线程一直处于活跃状态,以便程序能够响应,多余的线程进入阻塞状态,直到主动开启线程时,这些线程才会再次活动,线程执行完毕则继续阻塞,当启动的线程数超过了线程池默认线程数量则会创建一个新线程,线程池的线程也不是一直存在的,当线程长时间不使用时,CLR会唤醒线程,并退出线程。

在过去,启动一个线程用到的是Thread,ThreadPool类,他们在使用上不太方便,所以现在使用的是Task类,Task类启动的线程也是由线程池托管的,并且提供了诸如取消,超时,延续等很方便的API接口。微软也提供了async  await 关键字,他允许方法异步执行和等待,这是一种通关状态机来实现的机制,标记了并使用了async await的方法,最终都会由编译器生成一个状态机,并把方法的IL代码生成在状态机中,在代码中的效果是代码会执行到await 那一行并在异步方法完成时继续执行await之后的代码。

对于多线程的学习我想专门放在一个章节中整理,多线程 原子操作 内存栅栏 锁。

后记:这本书本来上个月就应该看完了,但无奈,中间有其他事情所以耽误了这么久。

最后书的链接在这里:链接:https://pan.baidu.com/s/1KBCd-YSbfnbxgSicH-KyWg 密码:sp9n

猜你喜欢

转载自blog.csdn.net/u014690615/article/details/80529455