亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現控制線程池最大數并發線程

2020-01-24 01:02:08
字體:
來源:轉載
供稿:網友

1. 實驗目的:

      使用線程池的時候,有時候需要考慮服務器的最大線程數目和程序最快執行所有業務邏輯的取舍。
并非邏輯線程越多也好,而且新的邏輯線程必須會在線程池的等待隊列中等待 ,直到線程池中工作的線程執行完畢,
才會有系統線程取出等待隊列中的邏輯線程,進行CPU運算。

2.  解決問題:

     <a>如果不考慮服務器實際可支持的最大并行線程個數,程序不停往線程池申請新的邏輯線程,這個時候我們可以發現CPU的使用率會不斷飆升,并且內存、網絡帶寬占用也會隨著邏輯線程在CPU隊列中堆積,而不斷增大。

      <b>如果我們想在主程序有200個http網絡通訊需要執行,如何每次循環用10個線程并發處理10個網絡http通訊回話,下一次循環只有在上一次循環的10個線程都執行完畢后才會執行下一次循環,并且主程序監聽和等待200個http網絡通訊都在CPU線程池中執行完畢后,才會退出主程序。

 3.  實現邏輯:

      我們通過兩個AutoResetEvent和線程監聽器Monitor,分別實現:

       <a>wait_sync:   任務線程的 并發執行,每次循環只處理最大10個線程分別對網絡做http通訊回話。并且當前循環的10個線程都執行完畢后,才會進行下一次循環處理。
       <b> wait_main: 主程序線程的監聽和等待,只有所有任務線程都執行完畢后,主程序線程才會退出程序。
       <c> list_Thread: 負責記錄每次循環,CPU實際分配的系統線程的個數。和Monitor配合使用,Monitor.Enter(list_Thread)=占用共享線程資源的占用鎖,Monitor.Exit(list_Thread)釋放共享線程資源的占用鎖。  
       <d> n_total_thread: 配合wait_main使用,記錄全部邏輯線程,已經執行完畢的當前總個數,用來判斷主線程是否還需要繼續等待,還是可以結束主程序運行。

4. 主要代碼:

    <a> 線程池控制代碼,如下:

/// <summary>/// 多線程調用WCF/// </summary>/// <param name="select">調用WCF的方式,1=Restful,2=Tcp</param>/// <param name="num"></param>static void DoTest_MultiThread(string select, long num){  int n_max_thread = 10; // 設置并行最大為10個線程  int n_total_thread = 0; // 用來控制:主程序的結束執行,當所有任務線程執行完畢   ILog log_add = new LogHelper("Add_Thread");  ILog log_del = new LogHelper("Del_Thread");  ILog log_wait = new LogHelper("Wait_Thread");  ILog log_set = new LogHelper("Set_Thread");  ILog log_for = new LogHelper("For_Thread");   Console.Title = string.Format("調用WCF的方式 => {0}, 調用次數=> {1}"    , select == "1" ? "Restful" : "Socket"    , num);     List<int> list_Thread = new List<int>();   System.Threading.AutoResetEvent wait_sync = new System.Threading.AutoResetEvent(false); // 用來控制:并發最大個數線程=n_max_thread  System.Threading.AutoResetEvent wait_main = new System.Threading.AutoResetEvent(false); // 用來控制:主程序的結束執行,當所有任務線程執行完畢   DateTime date_step = DateTime.Now;  for (long i = 0; i < num; i++)  {    Num_Query_Static++;    if (i >0 && (i+1-1) % n_max_thread == 0) // -1 表示第max個線程尚未開始    {      //log_wait.Info(string.Format("thread n= {0},for i= {1}", dic_Thread.Count, i + 1));      wait_sync.WaitOne(); // 每次并發10個線程,等待處理完畢后,在發送下一次并發線程    }    log_for.Info(string.Format("thread n= {0},for i= {1}", list_Thread.Count, i + 1));     System.Threading.ThreadPool.QueueUserWorkItem      ((data) =>      {        int id = System.Threading.Thread.CurrentThread.ManagedThreadId;        System.Threading.Monitor.Enter(list_Thread);        list_Thread.Add(id);        System.Threading.Monitor.Exit(list_Thread);         log_add.Info(string.Format("id={0}, count={1}", id, list_Thread.Count)); // 日志         if (select == "1") // Restful方式調用        {          Query_Htty();        }        else        {          Query_Socket();        }         n_total_thread += 1;        if (list_Thread.Count == (n_max_thread) || n_total_thread == num)        {          list_Thread.Clear();          //log_set.Info(string.Format("thread n= {0},for i= {1}", dic_Thread.Count, i + 1));          //wait_sync.Set();           if (n_total_thread != num)          {            wait_sync.Set(); // 任務線程,繼續執行          }          else          {            wait_main.Set(); // 主程序線程,繼續執行          }        }      }, list_Thread);  }   wait_main.WaitOne();   Console.WriteLine(string.Format("總測試{0}次,總耗時{1}, 平均耗時{2}"    , num    , (DateTime.Now - date_step).ToString()    , (DateTime.Now - date_step).TotalMilliseconds / num));   Query_Thread();}

 <b> WCF后臺服務代碼

private static ILog log = new LogHelper("SeqService"); // 日志private static Dictionary<int, DateTime> dic_thread = new Dictionary<int, DateTime>(); // 線程列表 private static long Num = 0; // 線程個數private static object lock_Num = 0; // 共享數據-鎖 /// <summary>/// 在線申請流水號/// </summary>/// <returns></returns>[WebGet(UriTemplate = "GetSeqNum/Json", ResponseFormat = WebMessageFormat.Json)]public string GetSeqNumber(){   lock (lock_Num)  {    Num++;    int id_thread = System.Threading.Thread.CurrentThread.ManagedThreadId;    DateTime now = DateTime.Now;    if (!dic_thread.TryGetValue(id_thread, out now))    {      dic_thread.Add(id_thread, DateTime.Now);    }   }  string ret = DateTime.Now.ToString("yyyyMMdd") + Num.ToString(new string('0', 9));    log.Info(string.Format("{0}, Thread={1}/{2}", ret, System.Threading.Thread.CurrentThread.ManagedThreadId, dic_thread.Count));  return ret;}   

5.  實驗結果

1. 10000個WCF網絡http請求,CPU分成每次10個(10可以按需求調整)線程并發執行,并且主程序在所有請求都執行完畢后,才退出主程序。

1. 前端日志:LogFile/Add_Thread/Info

2. WCF日志:LogFile/SeqService/Info

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色另类天堂2015| 97在线视频精品| 欧美高清视频在线观看| 91在线色戒在线| 国产精品日韩在线观看| 高清视频欧美一级| 黑人精品xxx一区一二区| 国产精品视频999| 国产精品观看在线亚洲人成网| 亚洲国产毛片完整版| 成人欧美一区二区三区在线湿哒哒| 国产一区二区在线免费视频| 91精品久久久久久久久青青| 亚洲天堂精品在线| 欧美日韩美女视频| 成人h猎奇视频网站| 久久99国产精品久久久久久久久| 国内精品久久久久久影视8| 亚洲美女在线视频| 97精品国产91久久久久久| 亚洲直播在线一区| 最近2019中文字幕第三页视频| 国产激情视频一区| 亚洲人成网站色ww在线| 亚洲最新中文字幕| 欧美野外猛男的大粗鳮| 麻豆成人在线看| 在线看福利67194| 日韩精品在线播放| 国产精品专区h在线观看| 国内免费久久久久久久久久久| 亚洲欧洲日产国产网站| 国产欧美va欧美va香蕉在线| 国产精品久久久久久久久久久不卡| 日韩午夜在线视频| 久久国产精品久久久久| 中文字幕国产亚洲2019| 国产精品爽黄69| 欧美性猛交丰臀xxxxx网站| 国产成人精品国内自产拍免费看| 一区二区三区黄色| 91中文字幕一区| 91精品一区二区| 久久久久五月天| 国产成人+综合亚洲+天堂| 欧美影院成年免费版| 欧美日韩一区二区精品| 精品福利在线视频| 日韩综合视频在线观看| 精品久久久久久久久久| 精品国产欧美一区二区三区成人| 日韩少妇与小伙激情| 欧美精品videossex性护士| 亚洲国产日韩精品在线| 一区二区中文字幕| 日韩美女免费视频| 97视频网站入口| 色爱av美腿丝袜综合粉嫩av| 成人精品久久久| 国产一区二区三区高清在线观看| 69av成年福利视频| 亚洲精品视频播放| 亚洲欧美日韩一区在线| 国产精品电影久久久久电影网| 国产一区二区三区中文| 国产婷婷97碰碰久久人人蜜臀| 久久亚洲精品毛片| 日韩中文av在线| 这里只有精品久久| 97人洗澡人人免费公开视频碰碰碰| 日韩成人久久久| 在线亚洲欧美视频| 欧美亚洲成人xxx| 亚洲欧美制服第一页| 久久在线视频在线| 久热精品视频在线免费观看| 欧美黑人一级爽快片淫片高清| 77777亚洲午夜久久多人| 性夜试看影院91社区| 中文字幕av一区二区三区谷原希美| 欧美黄色片免费观看| 成人性生交大片免费观看嘿嘿视频| 亚洲另类欧美自拍| 精品无码久久久久久国产| 亚洲欧美成人在线| 91精品91久久久久久| 欧美日韩精品二区| 欧美一级在线播放| 亚洲成色www8888| 亚洲欧洲第一视频| 国产精品日韩在线一区| 日韩黄在线观看| 亚洲人成亚洲人成在线观看| 欧美与欧洲交xxxx免费观看| 国产精品夜间视频香蕉| 国产精品成av人在线视午夜片| 91经典在线视频| 欧美中文字幕在线播放| 亚洲专区国产精品| 69久久夜色精品国产7777| 中文亚洲视频在线| 国产成人精品电影| 亚洲欧美另类在线观看| 中国日韩欧美久久久久久久久| 精品亚洲男同gayvideo网站| 亚洲视频在线观看视频| 国产在线观看精品一区二区三区| 久久国产天堂福利天堂| 456国产精品| 亚洲欧美自拍一区| 久久久久久欧美| 亚洲aa在线观看| 欧美成人sm免费视频| 精品日韩中文字幕| 福利一区福利二区微拍刺激| 在线日韩中文字幕| 在线观看视频亚洲| 亚州国产精品久久久| 成人av电影天堂| 国产suv精品一区二区三区88区| 日韩精品一区二区视频| 国产精品久久久久久久久久小说| 亚洲欧美日韩成人| 日韩精品久久久久| 一区二区三区亚洲| 欧美日韩国产91| 亚洲天堂第二页| 久久在线精品视频| 中文字幕亚洲综合| 国产成人精品午夜| 97国产在线观看| 久久综合久久美利坚合众国| 精品国产老师黑色丝袜高跟鞋| 国产成人精品a视频一区www| 欧美在线不卡区| 亚洲国产高清高潮精品美女| 2019中文字幕在线免费观看| 欧美一级在线播放| 中日韩美女免费视频网站在线观看| 国产不卡av在线| 欧美成人黄色小视频| 国产精品日日摸夜夜添夜夜av| 国产在线观看精品一区二区三区| 国产精品毛片a∨一区二区三区|国| 91精品国产综合久久香蕉| 国产综合色香蕉精品| 色综合久久88色综合天天看泰| 26uuu亚洲国产精品| 91av福利视频| 日韩av123| 欧美性资源免费| 日韩av男人的天堂| 国产欧美亚洲精品| 色婷婷综合成人av| 亚洲香蕉av在线一区二区三区| 久久免费高清视频| 久久天天躁狠狠躁夜夜爽蜜月| 日韩中文字幕网站| 91在线色戒在线| 96精品久久久久中文字幕| 亚洲国产91精品在线观看| 久久亚洲成人精品| 久久精品国产精品| 国产精品久久久久久超碰|