首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

淺談 .NET 多線程與並行計算(五):線程池基礎(上)

     編輯:關於ASP.NET

為何需要線程池?

線程、資料庫連線等資源創建/銷毀代價高。池化技術:預先備妥資源,用時取用、閒時歸還、不足時擴充,避免頻繁分配回收。

高併發場景:每秒 100 請求,每請求需 10 線程 → 每秒 1000 線程開關,每線程 1 MB 堆疊,記憶體分配/回收壓力極大。

線程池兩類線程與配置

  • 工作線程:執行 CPU 密集任務
  • I/O 線程:處理非同步 I/O 完成
ThreadPool.SetMinThreads(2, 2); // 最小工作/IO 線程
ThreadPool.SetMaxThreads(4, 4); // 最大工作/IO 線程

最小線程數確保池中始終保留線程,避免頻繁創建銷毀;最大線程數限制併發上限,超出則排隊。

QueueUserWorkItem 基本用法

static readonly int totalThreads = 10;
for (int i = 0; i < totalThreads; i++)
{
    ThreadPool.QueueUserWorkItem(o =>
    {
        Thread.Sleep(1000);
        int a, b;
        ThreadPool.GetAvailableThreads(out a, out b);
        Console.WriteLine(string.Format("({0}/{1}) #{2} : {3}", a, b, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("mm:ss"));
    });
}
Console.WriteLine("Main thread finished");
Console.ReadLine();

輸出顯示前4個線程立即執行,後續排隊等待,釋放後繼續

結果驗證:最大 4 線程並行,其餘排隊;任務完成釋放線程後,等待任務接續執行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved