针对于多线程概念的理解
今天是2月28日,本來的想法是每月一兩篇,但是時間有點太匆忙,在這里也想向大家說一說,時間很少,愿各位好好珍惜,今天談一談多線程,如同其文字描述一樣,線程很多,這也是多線程存在的原因,那首先什么是多線程呢,在這里,表明一下我的理解方式和我對多線程學習采用的一種套路。
首先,我是一個想象流,很多事情是可以通過想象空間進行理解的,文字性的東西總歸有它的約束存在,不可能有什么是可以一句話概括其所有,其實.NET 甚至是很多的編程語言,內部都是由生活的抽象得到的,有時候,很多沒有理解的技術點,或是沒有遇到的,沒有經歷過的解決一件事情的辦法,在程序中也可以得到認識,猶如讀了很多感悟生活,感悟人生的書,只不過我們的許多見解是在程序中得到的。
現在,談一談,多線程的想象空間,最初學習時,看到多線程的概念,和各種實現多線程的方法,我是拒絕的,感覺太難了,完全沒有邏輯性可言,但是當我用想象空間進行學習時,壓力幾乎消失了,比如說一個進程中開了四個線程,其中一個主線程,三個子線程,可以好比如說四座相互平行的橋,橋下是水,其中主線程是作為主橋,來往的車輛最多,而其它三個副橋暫時封閉,當需要運行多個任務并且希望時間又不浪費,那么三個副橋就開通了,四橋同時通車,多線程的概念也就結束了,什么? 這么簡單,? 對 就是這么簡單,畢竟那是我們生活的抽象。
而多線程還是沒給一個定義呢,之前已經說了,文字性的東西不足以描述一個事情,我們只需要知道它的想象即可,橋與橋之間是相互獨立的,橋上的資源是相互獨立的,并且都是一樣的,也就是在磁盤中,克隆出相同的資源,但是代碼是只有一份的,運行的時候我們可以重復使用。
?
說說.NET中多線程的實現方式:
首先需要知道,多線程總共有的幾種名詞:Thread ThreadPool Task Parallel? await/async 就這么幾種,并且由于前兩種的使用是幾年前的定義其中用的委托還不是.NET4.0定義的Action和Func這種委托,因此使用的一般是以前的應用程序,但是不是說他們已經淘汰了,只不過后面有更方面的使用形式,前期的只是失去了光輝,其中await/async理解上比較復雜,實際掌握的人還是不多,使用比較多的還是Task和Parallel,我比較喜歡使用Parallel,簡單粗暴,并且主線程也在執行中,沒有太大的浪費,順便提一句,Task Parallel 都是基于線程池才有的。線程想要通過程序調試去理解,是很難的,記得聽到一個朋友說,她想調試下線程,然后理解它,但是每一次都是不一樣的結果,其實這也反應了一個問題,線程的不可預測性,并且當線程數量很多時,線程的啟動和結束都是無序的,線程的執行能力也是不一樣的,想要通過調試理解,由此也是很困難的??
再次提到想象空間,通過它,理解多線程來說不是什么難事,如前面的例子,四座副橋上盡管都是在跑著汽車,但是呢誰能保證哪座橋汽車最先沒有呢,結果的不可預測性,在現實生活中也是的,假設你只能看到四座橋的風景,車來車往是否結束都不知道,能否保證那座橋上的汽車已經跑完了呢,答案也是無法確定。
?
以上所說了這么多文字,也套用了我說的里面那句話,文字不足矣描述需要的信息,但是我想表達的想象空間,希望能幫助碰上瓶頸的朋友們過了多線程這道坎,并且由于每個人對多線程想象空間的建模不一樣,這是我碰到過的,有人理解多線程為管道,有人理解為馬路,都是不錯的。并且,也許在一部分人中,不需要這樣的想象空間,那也可以幫助下需要的人講解下。
好了到此結束了,時間很緊迫,估計下一次也不知道什么時候才有時間寫下一篇自己的見解。珍惜時間吧,Everyone!
???????????
?
轉載于:https://www.cnblogs.com/CKExp/p/10520095.html
總結
以上是生活随笔為你收集整理的针对于多线程概念的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pat 团体赛练习题集 L2-008.
- 下一篇: Android视频拍摄功能总结