问题:
1个线程和100个线程同时执行一件事情,那个耗时最短?
下边是代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 7 namespace _2012_05_08 8 { 9 class Program 10 { 11 delegate void doRun(); 12 static void Main(string[] args) 13 { 14 Console.Write("清输入一个数字:"); 15 long Num = long.Parse(Console.ReadLine().Trim()); 16 //while (!Int32.TryParse(Console.ReadLine().Trim(), out Num)) { } 17 OneThread(Num); 18 19 while (true) 20 { 21 Console.WriteLine("稍事休息...");//此处是为了让CPU空闲一会儿 22 Thread.Sleep(2000); 23 Console.WriteLine("休息完毕继续>>···"); 24 Console.Write("您希望开几个线程来执行此方法:"); 25 OneHundredThreads(Num, Int32.Parse(Console.ReadLine().Trim())); 26 } 27 } 28 static void OneThread(long Num) 29 { 30 int iBeginS = DateTime.Now.Second; 31 int iBeginMS = DateTime.Now.Millisecond; 32 33 max = Num; 34 Method(); 35 36 int iEndS = DateTime.Now.Second; 37 int iEndMS = DateTime.Now.Millisecond; 38 int temp = (iEndS - iBeginS) * 1000 + iEndMS - iBeginMS; 39 //这里的计时方法同下边方法的计时方法相同,只是粗略的方法,难免会出现 (负耗时) 的情况, 40 //只需重新执行就行了。 41 int iCountS = temp / 1000; 42 int iCountMS = temp % 1000; 43 Console.WriteLine("OneThread方法执行完毕,用时 {0} 秒 {1} 毫秒", iCountS, iCountMS); 44 } 45 static void OneHundredThreads(long Num,int HowMuch) 46 { 47 int iBeginS = DateTime.Now.Second; 48 int iBeginMS = DateTime.Now.Millisecond; 49 50 max = Num; 51 Thread[] Ts = new Thread[HowMuch]; 52 for (int i = 0; i < Ts.Length; i++) 53 { 54 //if (max <= 0) break; //这一段代码页是比较耗时的,但是在线程数过大的时候还是挺高效的 55 Ts[i] = new Thread(Method); 56 Ts[i].Start(); 57 } 58 59 int iEndS = DateTime.Now.Second; 60 int iEndMS = DateTime.Now.Millisecond; 61 int temp = (iEndS - iBeginS) * 1000 + iEndMS - iBeginMS; 62 int iCountS = temp / 1000; 63 int iCountMS = temp % 1000; 64 Console.WriteLine("OneHundredThreads方法执行完毕,用时 {0} 秒 {1} 毫秒", iCountS, iCountMS); 65 } 66 67 //这里是线程要执行的方法,给定一个数,累减到0 68 private static long max { set; get; } 69 static void Method() 70 { 71 while (true) 72 { 73 if (max <= 0) break; 74 max--; 75 } 76 } 77 } 78 }
//总结:
// ①决定执行效率的不仅包含线程要执行的方法的复杂度,还有多开线程的线程数。
// ②尽量少的线程,来执行比较复杂的方法,要比单开线程执行要高效。
// ③简单的方法还是用单线程来执行比较合理。
// ④找到一种高效的线程执行方法需要经验和不断的调试。
//回到思考题的答案上,不管执行的方法是否复杂 (单线程执行) 总要比 (开100个线程执行) 要可行的多。
[菜鸟学习笔记,老鸟勿喷]