目錄
1.什么是IO密集型任務/CPU密集型任務
2.高并發概念和技術實現
2.并行(Parallelist)概念和技術實現
4.核心區別對比
1.什么是IO密集型任務/CPU密集型任務
1.IO密集型任務:
定義:任務核心邏輯不依賴CPU計算,而是大部分時間等待外部IO(指程序與外部設備(如:磁盤,網絡,數據庫,鍵盤鼠標)的數據交互)操作;
簡單說:CPU在“等”,沒干活
核心特征:
? ? ? ? 等待事件遠大于計算時間;
? ? ? ? CPU利用率低:若用單線程處理IO密集型任務,CPU會頻繁處于“空閑等待”,資源浪費
? ? ? ? 并發價值高:可以通過多線程/異步,同時去處理其他任務,提高單位時間內任務吞吐量
? ? ? ? 注意:絕不用 “單線程同步”:正確做法是用
async/await
異步,讓 CPU “同時處理多個等待中的 IO 任務”。異步的核心:“非阻塞等待”CPU無需等待IO完成,可繼續處理其他任務,IO處理完成再回調處理結果,最大化CPU利用率。
2.CPU密集型任務
定義:CPU始終處于“滿負荷工作”狀態,直到計算完成;
核心特征:
????????計算時間遠大于等待時間;
? ? ? ? CPU利用率高:單線程處理時,CPU 會被 100% 占用(直到任務完成),但僅能利用一個 CPU 核心,多核 CPU 資源被浪費;那多線程和多核CPU是什么關系
? ? ? ? 并行價值高;
注意:CPU 密集型任務:絕不用 “大量線程并行”
若為 CPU 密集型任務創建遠超 CPU 核心數的線程(如 16 核 CPU 創建 100 個線程),會導致線程頻繁切換(上下文切換開銷),反而降低計算效率。正確做法是用Parallel
或控制線程數(如線程數 = CPU 核心數),避免切換浪費。????????
2.高并發概念和技術實現
概念:是指系統在單位時間內處理大量同時發生的請求或者任務的能力;
關鍵特征:
🔁 ??邏輯上的同時??:通過時間片輪轉模擬同時執行
? ??I/O密集型??:適合網絡請求、文件操作、數據庫訪問
🧵 ??少量線程服務大量請求??:線程數可能遠大于CPU核心數
🎯 ??提高資源利用率??:在等待I/O時釋放線程處理其他任務
技術實現
1.asybc/await
// Web API 中的高并發處理 [ApiController] public class ProductsController : ControllerBase {[HttpGet("{id}")]public async Task<IActionResult> GetProduct(int id){// 異步數據庫查詢 - I/O等待時線程可處理其他請求var product = await _dbContext.Products.FindAsync(id);// 異步調用外部APIvar reviews = await _httpClient.GetStringAsync($"https://api.reviews.com/products/{id}");return Ok(new { product, reviews });} }
2.大量異步任務管理(使用SemaphoreSlim)
注:可對同時訪問資源或者資源池的線程數加以限制;精細控制特定操作的并發度
// 限制數據庫連接并發訪問 var dbSemaphore = new SemaphoreSlim(10); async Task QueryDatabase() {await dbSemaphore.WaitAsync();try { /* 使用連接 */ }finally { dbSemaphore.Release(); } }
2.并行(Parallelist)概念和技術實現
核心概念:并行是多核CPU真正同時執行多個計算任務;
關鍵特征:
? ??物理上的同時??:多個CPU核心同時工作
🔢 ??CPU密集型??:適合數學計算、圖像處理、數據分析
?? ??任務數 ≈ CPU核心數??:最大化利用計算資源
🎯 ??提高計算吞吐量??:縮短總體計算時間
技術實現:
1.Parallel類
// 數據并行處理 public void ProcessImagesInParallel(List<Image> images) {Parallel.ForEach(images, image =>{// 每個圖像在獨立CPU核心上處理image.Resize(800, 600);image.ApplyFilter(FilterType.Sharpen);image.SaveToDisk();});Console.WriteLine("所有圖像處理完成"); }
2.PLINQ(并行LINQ)
// 大數據集并行查詢 public List<Customer> FindHighValueCustomers(List<Customer> customers) {return customers.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount).Where(c => c.TotalPurchases > 10000).Where(c => c.IsActive).OrderByDescending(c => c.TotalPurchases).ToList(); }
3.任務并行庫
// 復雜計算任務的并行執行 public async Task<double[]> ComputeComplexResultsAsync() {var tasks = new Task<double>[4];// 同時執行多個計算任務tasks[0] = Task.Run(() => CalculatePi(1000000));tasks[1] = Task.Run(() => CalculateE(1000000));tasks[2] = Task.Run(() => CalculatePrimeNumbers(100000));tasks[3] = Task.Run(() => CalculateFibonacci(1000));return await Task.WhenAll(tasks); }
4.核心區別對比
特性
高并發(Concurrency)
并行(Parallelism)
??目標??
提高資源利用率
提高計算吞吐量
??執行方式??
邏輯并發(交替執行)
物理并發(同時執行)
??適用場景??
I/O密集型操作
CPU密集型操作
??線程關系??
線程數 ? 核心數
線程數 ≈ 核心數
??關鍵技術??
async/await, Task
Parallel, PLINQ
??性能瓶頸??
I/O速度、網絡延遲
CPU計算能力
??典型應用??
Web服務器、數據庫
科學計算、圖像處理