线程池 ManualResetEvent
線程池:
“線程池”是可以用來在后臺執(zhí)行多個(gè)任務(wù)的線程集合。(有關(guān)背景信息,請參見使用線程處理。)這使主線程可以自由地異步執(zhí)行其他任務(wù)。
線程池通常用于服務(wù)器應(yīng)用程序。每個(gè)傳入請求都將分配給線程池中的一個(gè)線程,因此可以異步處理請求,而不會(huì)占用主線程,也不會(huì)延遲后續(xù)請求的處理。
一旦池中的某個(gè)線程完成任務(wù),它將返回到等待線程隊(duì)列中,等待被再次使用。這種重用使應(yīng)用程序可以避免為每個(gè)任務(wù)創(chuàng)建新線程的開銷。
線程池通常具有最大線程數(shù)限制。如果所有線程都繁忙,則額外的任務(wù)將放入隊(duì)列中,直到有線程可用時(shí)才能夠得到處理。
您可以實(shí)現(xiàn)自己的線程池,但是通過 ThreadPool 類使用 .NET Framework 提供的線程池更容易一些。
參見:https://msdn.microsoft.com/zh-cn/library/3dasc8as(vs.80).aspx
?
ManualResetEvent 類
ManualResetEvent??? 允許線程通過發(fā)信號互相通信。? 通常,此通信涉及一個(gè)線程在其他線程進(jìn)行之前必須完成的任務(wù)。?
當(dāng)一個(gè)線程開始一個(gè)活動(dòng)(此活動(dòng)必須完成后,其他線程才能開始)時(shí),它調(diào)用 Reset 以將 ManualResetEvent 置于非終止?fàn)顟B(tài)。? 此線程可被視為控制 ManualResetEvent。? 調(diào)用 ManualResetEvent 上的 WaitOne 的線程將阻止,并等待信號。? 當(dāng)控制線程完成活動(dòng)時(shí),它調(diào)用 Set 以發(fā)出等待線程可以繼續(xù)進(jìn)行的信號。? 并釋放所有等待線程。?
一旦它被終止,ManualResetEvent 將保持終止?fàn)顟B(tài),直到它被手動(dòng)重置。? 即對 WaitOne 的調(diào)用將立即返回。?
可以通過將布爾值傳遞給構(gòu)造函數(shù)來控制 ManualResetEvent 的初始狀態(tài),如果初始狀態(tài)處于終止?fàn)顟B(tài),為 true;否則為 false。
ManualResetEvent?? 也可以同 staticWaitAll 和 WaitAny 方法一起使用。
?參見:https://msdn.microsoft.com/zh-cn/library/system.threading.manualresetevent(v=vs.110).aspx
轉(zhuǎn)載于:https://www.cnblogs.com/ChineseMoonGod/p/4272088.html
總結(jié)
以上是生活随笔為你收集整理的线程池 ManualResetEvent的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NuGet 发布类库,依赖项的问题
- 下一篇: 如何避免云整合的问题