日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程的多核分配问题验证

發布時間:2025/3/18 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程的多核分配问题验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using System.Diagnostics; using System; using System.Threading.Tasks;namespace THREADS {class Threads{public double[] times = new double[4];public int[] counts = new int[] { 40000000, 50000000, 70000000 };/**** 測試驗證* 1,當一個進程有多個線程時,操作系統會自動將線程分配到不同的CPU上,最優化分配*/public void Start(){var sw = new Stopwatch();var tasks = new Task[4];/**** Step1,創建四個線程,(使用 new Thread是等效的)*///測試1,三個線程,每個線程跑一個任務tasks[0] = new Task(() => {DoTask(counts[0]);times[0] = sw.ElapsedMilliseconds;});tasks[1] = new Task(() => {DoTask(counts[1]);times[1] = sw.ElapsedMilliseconds;});tasks[2] = new Task(() => {DoTask(counts[2]);times[2] = sw.ElapsedMilliseconds;});//測試2,一個線程跑三個任務tasks[3] = new Task(() => {DoTask(counts[0]);DoTask(counts[1]);DoTask(counts[2]);times[3] = sw.ElapsedMilliseconds;});/**** Step2,開啟測試線程*///PrintProcessInfo("測試線程開啟前"); 開啟會使t4時間反而變短了,原因不明//BindThreadToCpu(0); 在此位置綁定是無效的,因為我們的測試線程還沒開啟,無法將它們都綁定到某個核上sw.Start();tasks[0].Start();tasks[1].Start();tasks[2].Start();tasks[3].Start();/**** Step3,綁定所有線程到某個核上* 可以發現,綁定后所有線程的運算時間都明顯加長了,因為它們共用一個CPU(debug模式效果更明顯,release模式在數據量小時不明顯)*/long bindtime = 0;if (true){var tsw = Stopwatch.StartNew();var t0 = tsw.ElapsedMilliseconds;BindThreadToCpu(0); //在此位置綁定是有效的,因為我們的測試線程已經開啟,可以將它們都綁定到某個核上bindtime = tsw.ElapsedMilliseconds - t0;}/**** Step4,等待所有線程結束打印運行時間*///PrintProcessInfo("測試線程開啟后");Task.WaitAll(tasks);Console.WriteLine($"time1:{times[0]}, time2:{times[1]}, time3:{times[2]}, time4:{times[3]}, bindtime:{bindtime}");}private void DoTask(int n){double sum = 9999999999;for (int i = 0; i < n; i++){sum /= (i + 1)*(i+1);}}private void PrintProcessInfo(string info){var p = Process.GetCurrentProcess();var threads = p.Threads;Console.WriteLine($"{info}:當前進程共有{threads.Count}個線程");}private void BindThreadToCpu(int core){var p = Process.GetCurrentProcess();var threads = p.Threads;if (core >= 0){for (int i = 0; i < threads.Count; i++){var item = threads[i];//將線程綁定到某個核上item.ProcessorAffinity = (IntPtr)(core + 1);item.IdealProcessor = core;}}}}class Program{static void Main(string[] args){new Threads().Start();Console.WriteLine($"執行完成,按任意鍵結束");Console.Read();}} }

總結

以上是生活随笔為你收集整理的多线程的多核分配问题验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。