今天是2月28日,本来的想法是每月一两篇,但是时间有点太匆忙,在这里也想向大家说一说,时间很少,愿各位好好珍惜,今天谈一谈多线程,如同其文字描述一样,线程很多,这也是多线程存在的原因,那首先什么是多线程呢,在这里,表明一下我的理解方式和我对多线程学习采用的一种套路。
首先,我是一个想象流,很多事情是可以通过想象空间进行理解的,文字性的东西总归有它的约束存在,不可能有什么是可以一句话概括其所有,其实.NET 甚至是很多的编程语言,内部都是由生活的抽象得到的,有时候,很多没有理解的技术点,或是没有遇到的,没有经历过的解决一件事情的办法,在程序中也可以得到认识,犹如读了很多感悟生活,感悟人生的书,只不过我们的许多见解是在程序中得到的。
现在,谈一谈,多线程的想象空间,最初学习时,看到多线程的概念,和各种实现多线程的方法,我是拒绝的,感觉太难了,完全没有逻辑性可言,但是当我用想象空间进行学习时,压力几乎消失了,比如说一个进程中开了四个线程,其中一个主线程,三个子线程,可以好比如说四座相互平行的桥,桥下是水,其中主线程是作为主桥,来往的车辆最多,而其它三个副桥暂时封闭,当需要运行多个任务并且希望时间又不浪费,那么三个副桥就开通了,四桥同时通车,多线程的概念也就结束了,什么? 这么简单, 对 就是这么简单,毕竟那是我们生活的抽象。
而多线程还是没给一个定义呢,之前已经说了,文字性的东西不足以描述一个事情,我们只需要知道它的想象即可,桥与桥之间是相互独立的,桥上的资源是相互独立的,并且都是一样的,也就是在磁盘中,克隆出相同的资源,但是代码是只有一份的,运行的时候我们可以重复使用。
说说.NET中多线程的实现方式:
首先需要知道,多线程总共有的几种名词:Thread ThreadPool Task Parallel await/async 就这么几种,并且由于前两种的使用是几年前的定义其中用的委托还不是.NET4.0定义的Action和Func这种委托,因此使用的一般是以前的应用程序,但是不是说他们已经淘汰了,只不过后面有更方面的使用形式,前期的只是失去了光辉,其中await/async理解上比较复杂,实际掌握的人还是不多,使用比较多的还是Task和Parallel,我比较喜欢使用Parallel,简单粗暴,并且主线程也在执行中,没有太大的浪费,顺便提一句,Task Parallel 都是基于线程池才有的。线程想要通过程序调试去理解,是很难的,记得听到一个朋友说,她想调试下线程,然后理解它,但是每一次都是不一样的结果,其实这也反应了一个问题,线程的不可预测性,并且当线程数量很多时,线程的启动和结束都是无序的,线程的执行能力也是不一样的,想要通过调试理解,由此也是很困难的
再次提到想象空间,通过它,理解多线程来说不是什么难事,如前面的例子,四座副桥上尽管都是在跑着汽车,但是呢谁能保证哪座桥汽车最先没有呢,结果的不可预测性,在现实生活中也是的,假设你只能看到四座桥的风景,车来车往是否结束都不知道,能否保证那座桥上的汽车已经跑完了呢,答案也是无法确定。
以上所说了这么多文字,也套用了我说的里面那句话,文字不足矣描述需要的信息,但是我想表达的想象空间,希望能帮助碰上瓶颈的朋友们过了多线程这道坎,并且由于每个人对多线程想象空间的建模不一样,这是我碰到过的,有人理解多线程为管道,有人理解为马路,都是不错的。并且,也许在一部分人中,不需要这样的想象空间,那也可以帮助下需要的人讲解下。
好了到此结束了,时间很紧迫,估计下一次也不知道什么时候才有时间写下一篇自己的见解。珍惜时间吧,Everyone!