一. 背景
在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并发问题,后面随着处理的系统业务越来越复杂,多线程再也回避不了了,也就借此机会深入研究了一下.Net中的多线程的处理方案。
发现在.Net领域中,多线程的处理大致经历了这么几个阶段:Thread→ThreadPool→委托的异步调用→Task→TaskFactory→Parallerl→异步编程模型(async和await)。
本质: 充分发掘CPU的性能,把一些并没有先后强依赖关系、且耗时代码块放到一个新的线程里去处理,那么原先按顺序执行的业务就会变成并行执行,让主线程继续往后执行,节约了时间了,提高了效率。
下面补充一下多线程在时间和空间上的开销:
(一). 时间上:
①:开启或销毁一个线程都会通知进出中的dll程序集,让这些dll进行相应的操作。
②:时间片切换:4个逻辑处理器(不考虑Inter的超线程技术,一核对多个线程),同时并行只能处理4个线程,多余的休眠,很多时候,我们看似很多线程在并行执行,实际上是间歇性的串行。
《关于这个说法有异议的话,请留下您的见解,欢迎讨论》
(二). 空间上:
①:用户模式堆栈,一个线程分配1M的堆栈空间。
②:内核模式的堆栈,用户模式的参数需要传递到内核模