单线程与多线程执行效率

问题:
  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个线程执行) 要可行的多。

 

[菜鸟学习笔记,老鸟勿喷]

转载于:https://www.cnblogs.com/TPoint/archive/2012/09/13/2683121.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值