日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
.NET中的線程池的創(chuàng)建和使用

線程池就是首先創(chuàng)建一些線程,它們的集合稱為線程池。使用線程池可以很好地提高性能,線程池在系統(tǒng)啟動時即創(chuàng)建大量空閑的線程,程序將一個任務傳給線程池,線程池就會啟動一條線程來執(zhí)行這個任務,執(zhí)行結束以后,該線程并不會死亡,而是再次返回線程池中成為空閑狀態(tài),等待執(zhí)行下一個任務。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,常寧企業(yè)網(wǎng)站建設,常寧品牌網(wǎng)站建設,網(wǎng)站定制,常寧網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,常寧網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

使用ThreadPool來訪問線程池

這種做法可以讓我們不用那么復雜的去實現(xiàn)創(chuàng)建,重用線程的邏輯,但是也有一些限制,比如由他內(nèi)置的方法,我們不知道什么時候線程池里面的任務會結束,也不能獲取線程的返回值。為了解決這些問題,微軟引入了一個新的概念。

使用Task來訪問線程池

引入了Task之后,你可以用如下實現(xiàn)來替代ThreadPool

這些實現(xiàn)都是等價的。Task本身實現(xiàn)了很多ThreadPool不能做的事情。

使用Task來獲得線程的返回值

使用Task來等待線程結束

更多Task同步編程的使用,請參見(還沒寫,先給自己挖個坑O(∩_∩)O)。

異步委托

ThreadPool.QueueUserWorkItem沒有提供一種簡單的機制來獲取線程的返回值。異步委托解決了這個問題,支持了傳入一系列的參數(shù)。此外,異步委托中沒有處理的異常會很方便的在調(diào)用線程的重新拋出(在調(diào)用EndInvoke的時候),因此不需要顯示的處理。

通過異步委托來執(zhí)行任務主要分一下幾步:

  1. 初始化并聲明一個你想要執(zhí)行的委托
  2. 在委托上調(diào)用BeginInvoke,把返回值保存為IAsyncResult中

調(diào)用BeginInvoke不會阻塞當前線程,因此你可以在調(diào)用完之后執(zhí)行其他你想要同步的操作

  1. 當你需要獲取委托的返回值時,調(diào)用EndInvoke方法,把IAsyncResult傳入EndInvoke中

阻塞的方式執(zhí)行異步委托

EndInvoke主要做3件事: 1. 等待異步委托完成 2. 接收返回值 3. 把異步線程中未處理的異常在當前線程中重新拋出。

非阻塞的方式執(zhí)行異步委托

你也可以在調(diào)用BeginInvoke的時候指定一個回調(diào)方法,這個方法會在異步委托結束的時候自動調(diào)用。這樣異步委托就像是一個后臺線程一樣自動執(zhí)行,不需要主線程等待。只需要在BeginInvoke的時候做一些額外的操作即可實現(xiàn)這種操作。

關于線程池

Jeffery在C# via CLR Chapter27中針對線程池的使用給出了一些建議。目前我們允許開發(fā)者來指定一個線程池的最大線程數(shù)。但是事實證明,我們往往不應該為一個線程池指定線程的上限,否則可能會出現(xiàn)程序死鎖或者餓死的狀態(tài)。比如你可能設置了1000個線程,但是某一時刻正好有第1001個線程需要等待所有線程結束才能執(zhí)行,這種情況如果你限制了線程池線程的個數(shù),就會出現(xiàn)死鎖。從開發(fā)的另一個角度說,你也不應該限制一個進程使用多少資源,比如一個進程可以使用多少內(nèi)存,使用多少帶寬.因此雖然目前你可以通過GetMaxThreads, SetMaxThreads,GetMinThreads,SetMinThreads ,GetAvailableThreads來進行線程個數(shù)的限制,但是他仍然不建議大家這樣做。這些限制可能會讓你的程序運行的更慢。


本文題目:.NET中的線程池的創(chuàng)建和使用
URL標題:http://m.5511xx.com/article/djephpd.html