第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多線程問題 !

多線程問題 !

躍然一笑 2018-12-07 03:29:33
自己弄了個例子為什么我開辟的4個線程運行的時間比 普通的方法時間還長呢? 當然你們會說什么調度 時間片 線程的切換的原因要怎么才快呢? 代碼 先新建個類ThreadDemo? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ThreadDemo { public class ThreadDemo { public Thread thread1 = null; public Thread thread2 = null; public Thread thread3 = null; public Thread thread4 = null; public List listInt = null; private List listInt2 = null; private event EventHandler ehRemoveCompleted; public ThreadDemo() { ehRemoveCompleted += new EventHandler(ThreadDemo_ehRemoveCompleted); listInt = new List(); for (int i = 0; i < 10000; i++) { listInt.Add(i); } thread1 = new Thread(Run); thread1.Name = "線程1"; thread2 = new Thread(Run); thread2.Name = "線程2"; thread3 = new Thread(Run); thread3.Name = "線程3"; thread4 = new Thread(Run); thread4.Name = "線程4"; listInt2 = new List(); for (int j = 0; j < 10000; j++) { listInt2.Add(j); } } void ThreadDemo_ehRemoveCompleted(object sender, EventArgs e) { Program.methodWatch.Stop(); Console.WriteLine(Program.methodWatch.ElapsedTicks + "____________________________________"); thread1.Abort(); thread2.Abort(); thread3.Abort(); thread4.Abort(); } public void DoWorker() { thread1.Start(); thread2.Start(); thread3.Start(); thread4.Start(); } void Run() { while (true) { Monitor.Enter(this); if (listInt.Count > 0) { listInt.RemoveAt(0); } Monitor.Exit(this); if (listInt.Count == 0) { ehRemoveCompleted(this, new EventArgs()); } } } public void DoWorker2() { for (int i = 0; i < listInt2.Count; i++) { listInt2.Remove(i); } } } } ? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Diagnostics; namespace ThreadDemo { class Program { public static Stopwatch methodWatch = null; static void Main(string[] args) { ThreadDemo t = new ThreadDemo(); methodWatch = new Stopwatch();//1 methodWatch.Start();//2 t.DoWorker();//3 //先運行上面的 1,2,3 記下結果 然后注釋1,2,3 把下面的去掉注釋運行 //Stopwatch expWatch = new Stopwatch(); //expWatch.Start(); //t.DoWorker2(); //expWatch.Stop(); //Console.WriteLine(expWatch.ElapsedTicks); } } } 為什么 怎么才能快一點呢?
查看完整描述

3 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

當然就是調度的原因了(其它可能的性能問題難免有例外,此處忽略)。 ? 調度線程是開支很大的,如果你的線程開支不高的話,走多線程是不合算的。 ? 多線程存在的價值: ? 1、有需要等待的(比如頁面訪問、輸入等待、輸出等待等)。 2、處理周期長,可以通過多線程并行處理的。
查看完整回答
反對 回復 2018-12-09
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

樓主這種情況,使用多線程效率也不會有提升的,單線程的寫法應該是最快了,因為樓主的主線程里沒有出現(xiàn)一樓所說的阻塞情況,cpu時間充分利用了
查看完整回答
反對 回復 2018-12-09
  • 3 回答
  • 0 關注
  • 384 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號