欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

.NET簡談組件程序設計之(多線程與并發管理一)

系統 1929 0

由于多線程的內容比較多我會用幾篇文章來講解。

多線程在我們日常開發過程中用的很多,上一篇“ .NET簡談組件程序設計之(異步委托) ”詳細的講解了基于委托的多線程使用,委托是基于后臺線程池的原理,這篇文章將主要介紹直接使用Thread對象來實現多線程。

當然使用Thread沒有使用Delegate那么容易,畢竟多線程跟異步調用是兩個相差很大的技術方向,我也是略懂點皮毛,在此獻丑給大家,如有講的不對的地方還請指出。 [王清培版權所有,轉載請給出署名]

我們先來理解幾個概念,以方便我們學習。

后臺線程與前臺線程

前臺線程:什么叫前臺線程,就是我們使用默認的Thread創建出來的沒有進行IsBackground屬性設置的都是前臺線程,因為默認IsBackground是false。前臺線程是明確任務的,也就是任何一個前臺線程沒有結束之前程序是不會自動退出的,除非強制關閉應用程序。

后臺線程:后臺線程是針對前臺線程來說的,將Thread.IsBackground設置為true就是后臺線程,后臺線程是為前臺線程服務的,就是說后臺線程沒有很強的生命力,只要前臺線程都結束了,后臺線程都強制結束,哪怕任務還沒有完成都不行。所以我們在使用的時候要看情況進行選擇。 [王清培版權所有,轉載請給出署名]

線程的切換

我們來看一段代碼,以方便引入主題。


這是一段很簡單的代碼,就是一個ShowMessage方法,在方法里面有一個獲取當前上下文線程的靜態屬性Thread.CurrentThread,然后輸入該線程的名稱和托管ID號;

這是調用代碼,我先給主線程起個名字,然后輸出。我新建了一個thread線程,這是子線程,調用我們上面定義的方法,用同樣的Thread.CurrentThread來獲取當前上下文線程,最后讓主線程休眠一秒鐘。

.NET簡談組件程序設計之(多線程與并發管理一)

通過該圖我們能清楚的看見,系統在后臺自動幫我們進行線程切換,用同一個靜態變量就可以獲取到當前線程對象。

通過Sleep方法是讓當前線程休眠指定的時間斷,哪怕當前線程正在CPU上運行著,一旦調用Sleep就立刻放棄CPU給它的時間片,進入阻塞狀態。

[一個線程僅僅是一個進程中的執行路徑]

其實線程是執行路徑,系統中維護著一個執行路徑的命令集合,當我們開啟了多個線程的時候其實就是往著個命令集合中存放了很多要執行的命令而已,換句話說命令就是線程隊列,用CPU 對它進行時間片的執行。

那么線程是肯定需要一系列的狀態的,這個狀態時有OS幫我們維持著,因為線程是屬于內核層的對象,只有OS才能實時監控著。我們只需要用就行了,有興趣的朋友可以參考,杰夫瑞 (Jeffrey Richter)《Windows核心編程(第5版)》一書。

讓線程等待而不是切換

Sleep是強制放棄CPU的時間片,然后重新和其他線程一起參與CPU的競爭。用Sleep是會讓線程放棄CPU的使用權,而如果我們換成 Thread.SpinWait(100000000),是不會放棄CPU的使用權的,只是讓CPU去執行一段沒有用的代碼,當時間結束之后能立馬繼續執行,而不是和重新參與CPU的競爭。

在系統資源很豐富的情況下可能這點并不重要,但是在資源缺乏,CPU又不是很好的時候,我想這點還是能改善點性能的。

在此不得不提一個重要的概念,就是線程的調用方和線程主體,線程的調用方就是線程的客戶端,是另外一個線程,而不是當前線程主體。

Thread.Join()連接線程

join方法從字面理解是連接的意思,剛接觸真的很難理解,什么叫連接。請看一段代碼:

通過Join我們可以等待線程結束,連接的意思就是將我和我調用的thread線程連接起來,我要等你結束之后我才能繼續執行,這里就是主線程和子線程的關系,只有子線程技術之后,主線程才能繼續執行。

Thread.Abort終止線程

利用Abort可以終止一個在執行的線程,但是Abort會在線程上引發一個ThreadAbortException異常。

.NET簡談組件程序設計之(多線程與并發管理一)

Thread.IsBackground = true后臺線程

通過設置IsBackground可以讓線程處于后臺線程,只要前臺線程結束,那么后臺線程自動終止。

我們將一段代碼注釋掉。


這是調用代碼。只要前臺線程不結束,后臺線程就一直執行。如果我們在最后加上一段Console.ReadLine();代碼,那么后臺線程會始終運行著。

這篇文章就先結束了,下一篇我們將學習關于同步域和上下文的概念。





.NET簡談組件程序設計之(多線程與并發管理一)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品99久久久久久动医院 | 高清国产一区二区三区四区五区 | 毛片毛片毛片毛片毛片毛片 | 欧美a区| 日韩亚洲一区中文字幕在线 | 国产亚洲情侣一区二区无 | 欧美日韩一区二区三在线 | 五月婷婷导航 | 五月综合久久 | 成人欧美视频在线观看 | av在线浏览 | 中文字幕专区 | 日本AAAA片毛片免费观 | 米奇精品一区二区三区在线观看 | 亚洲精品在线播放 | 成人在线免费观看网站 | 成人黄色免费网站 | 比比资源先锋影音网 | 精品成人免费一区二区在线播放 | 狠狠操天天操 | 成人在线播放网站 | 国产91一区二这在线播放 | 国产精品成人av | 亚洲人成免费网站 | 国产片翁熄系列乱在线视频 | 日韩一区二区免费视频 | 凹凸日日摸日日碰夜夜爽孕妇 | 九九热视频精品在线观看 | 欧美日韩免费在线观看视频 | 国产精品视频在线观看 | 国产精品视频成人 | 成人一级黄色 | 成年人免费网站视频 | 好吊日在线观看 | 久久亚洲一区二区 | 一级做a爱片久久 | 亚洲欧美国产精品久久久久久久 | 欧美人在线 | 久久精品国产99国产 | 一区二区三区欧美在线观看 | 日本免费不卡一区二区 |