线程池:
- 当开始一个新的线程时候,将花费几百微秒来组织一下内容: 一个新的局部变量栈(Stack)
- 线程池可以节省这种开销: 通过预先创建一个可能循环使用的线程池来减少这种开销。
- 线程池对于高校的并行编程和细微度并发是必不可少的。
- 他允许在不被线程启用的开销淹没的情况下运行短期操作。
注意:
1 . 不可以设置线程名称
2 . 线程池都是后台线程。
3 . 阻塞线程可能是性能降低
4 . 你可以自由更改池线程的优先级,在运行结束后 恢复默认。
5 . 可以通过Thread.CurrentThread.IsThreadPoolThread 属性来判断该线程时候在线程池上。
进入线程池:
最简单的方法就是直接使用静态方法Task,Run (.net4.5开始才用)
线程池中的整洁:
1. 线程池提供了另外一种功能,确保临时超出 CuP-Bound 的工作不会导致CPU超哥订阅。
2. CUP 超额订阅: 活跃的线程超过CPU的核数,操作系统就需要对此案城进行时间切片。
3. 超额订阅对性能影响很大,时间切片就需要昂贵的上下文切换,并可能使CUP缓存失效,CPU 缓存对于现代处理器的性能至关重要
4. CLR通过对任务排队对齐启动进行节流限制,来避免线程池中的超额订阅。
5. 他首先运行尽可能多的并发任务(只要还有CPU核) 然后通过爬山算法进行并发级别调整,并在特定方向上下不断调整负载。
6. 如果吞吐量提高,他将继续朝同一个方向进行(否则翻转)
7. 这确保他始终追随最佳性能曲线,即使面对计算机上竞争的进程活动时也是如此。
8. 如果下面两点能够满足,那么CLR的策略将发挥出最佳效果: 工作项大多是短时间运行。 大部分时间都被阻塞的工作项不会主宰线程
9.