国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

多線程編程(1.線程池ThreadPool)

2019-11-06 06:06:52
字體:
來源:轉載
供稿:網友

什么是線程池(Pool)?

水池裝水,線程池裝線程。池(Pool)是一個很常見的提高性能的方式,之所以有這些池是因為線程和數據庫連接的創建和關閉是一種比較昂貴的行為。對于這種昂貴的資源我們往往會考慮在一個池容器中放置一些資源,在用的時候去拿,在不夠的時候添點,在用完就歸還,這樣就可以避免不斷的創建資源和銷毀資源。

最大線程(MaxThreads)?

池中能容納的最大線程數,就好比一個5L的水桶,硬是要裝10L的水肯定是裝不下的,線程池也一樣,可以使用SetMaxThreads來設置最大線程,如果不設置,系統會根據當前計算機的配置來計算默認最大線程。

最小線程(MinThreads)?

之所以使用線程池是不希望線程在創建后運行結束后理解回收,這樣的話以后要用的時候還需要創建,我們可以讓線程池至少保留幾個線程,即使沒有線程在工作也保留。

簡單示例:

首先,我們設置線程池最大線程是 300 個,最小線程是100個。 然后,我們需要有500個線程需要創建,每個線程執行需要10秒、

using System;using System.Collections.Concurrent;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Timers;namespace Consoleapplication39{ class PRogram { static void Main(string[] args) { int workerThreads, completionPortThreads; //設置線程池中最大線程為300個 ThreadPool.SetMaxThreads(300, 300); //線程池空閑線程100個,即沒有線程在工作線程池中也要保留100個線程 ThreadPool.SetMinThreads(100, 100); ThreadPool.GetMaxThreads(out workerThreads, out completionPortThreads); //輸出:線程池中最大工作線程300個,IO線程300個 Console.WriteLine("線程池中最大工作線程{0}個,IO線程{1}個/n", workerThreads, completionPortThreads); //聲明一個線程回調的委托 WaitCallback callback = ExecuteMethod; //申請10個線程執行 for (int i = 0; i < 500; i++) { //如果線程池中有線程,就執行回調方法 ThreadPool.QueueUserWorkItem(callback); Thread.Sleep(10); } Console.ReadLine(); } private static int i = 1; public static void ExecuteMethod(object state) { Console.WriteLine("第{0}個工作線程正在運行/n", i); i++; //每個線程執行5秒 Thread.Sleep(10000); } }}

運行效果可以看出來,前100個線程很快就能申請成功并執行.

而后,線程池最小100個空閑線程已經使用完了之后,線程池需要創建新的線程,這個線程申請的時間視.net framework而定,默認大概半秒鐘。(這里執行明顯就慢了許多)

10秒之后,最初的100個線程已經運行完了,將會還給線程池,此時池中又有100個空閑線程可以使用了。(這里執行又快了)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延津县| 延安市| 平度市| 西盟| 镇赉县| 舞钢市| 正宁县| 马龙县| 鹤山市| 稷山县| 乳山市| 永州市| 沾益县| 漳平市| 沂源县| 绿春县| 晋州市| 大庆市| 大兴区| 花莲市| 越西县| 新密市| 手游| 阳新县| 新闻| 林州市| 麻城市| 榆中县| 阿拉善盟| 赤水市| 河间市| 贡山| 雷波县| 深水埗区| 台东县| 青神县| 凤山县| 遂川县| 墨脱县| 霍林郭勒市| 行唐县|