https://www.bilibili.com/video/BV1hi4y1r7s1?spm_id_from=333.999.0.0
。
线程作为一个知识点,我们当然应该要掌握,但是真的应该用多线程吗?
以前微软御用培训师Jeff Richter曾痛心疾首地说:“我曾写了一些多线程编程的书,TMD的害了不少人。” Jeff说的是自己写的什么Windows Multi-Threading Programming的书,很老了的书了,大家不一定看见过,讲授了很多多线程编程“技巧”,你要是照着这书来做……你就真被带到沟里去了。
Jeff为什么痛恨多线程呢?因为岁月让他知道,应用层牵扯到多线程就是扯淡!
无独有偶,JavaScript界的泰斗(也是我的偶像)Douglas Crockford也说过:“总有人问我什么时候在JavaScript中增加线程功能,我的回答永远是:Never!” 道爷每次都要讲清楚,线程这概念在应用层根本就不应该出现,JavaScript虽然劣迹斑斑,但是语言级别一开始没有线程而且坚持没有线程,这算是一个很了不起的功能。
我给两位前辈总结一下:如果你搞系统级编程,你的确要处理多线程,但是如果你做得是应用层编程,你不该去碰多线程,所谓线程提供的只是并行执行的功能,应用层只需要把“任务”交出去,让底层去执行就好了,应用层就该关注应用逻辑,应用层为什么要自己创建线程去搞并行执行?
接下来,肯定有人觉得线程池是一个好概念,好吗?我就问你,线程池应该设多大?
Jeff说微软不断提高.Net平台的线程池默认大小,100不够长到200,200不够长到500……为什么要设上限呢?难道逻辑上就不该设限制吗?之所以实践中需要设限制,是因为应用层还是摆脱不开“线程”的概念。
所以,同学们依然是要知道啥叫线程,需要知道线程相关知识,但是如果你写应用层代码要自己创建线程,你就已经输了,挑一个没有线程概念的平台来写应用吧。