当前位置: 首页 > news >正文

黑河市网站建设_网站建设公司_版式布局_seo优化

南阳河南网站建设,网页设计与制作课程目标,管理咨询公司有哪些,wordpress添加购买按钮还是那句话#xff1a;十年河东#xff0c;十年河西#xff0c;莫欺少年穷。 今天和大家探讨一个问题#xff1a;Parallel.For 和 For 谁的效率高呢#xff1f; 从CPU使用方面而言#xff0c;Parallel.For 属于多线程范畴#xff0c;可以开辟多个线程使用CPU内核#x…还是那句话十年河东十年河西莫欺少年穷。 今天和大家探讨一个问题Parallel.For 和 For 谁的效率高呢 从CPU使用方面而言Parallel.For 属于多线程范畴可以开辟多个线程使用CPU内核也就是说可以并行处理程序。For 循环是单线程的一个线程执行完所有循环。 因此你会认为多线程的效率肯定高于单线程。但这样认为是错误的 例如下面程序 static void Main(string[] args){Stopwatch sw new Stopwatch();sw.Start();ParallelLoopResult result Parallel.For(0, 10000, i {Console.Write();});sw.Stop();TimeSpan ts2 sw.Elapsed;Console.WriteLine(Parallel.For总共花费{0}ms., ts2.TotalMilliseconds);//Stopwatch sw_Eq new Stopwatch();sw_Eq.Start();for (int i 0; i 10000; i){Console.Write(); }sw_Eq.Stop();TimeSpan tssw_Eq sw_Eq.Elapsed;Console.WriteLine(for总共花费{0}ms., tssw_Eq.TotalMilliseconds);Console.ReadKey();}   额为什么For 循环要比Parallel.For 效率要高呢 这是因为循环体内执行的任务开销太小仅仅是输出一个空字符串而已。微软的文章已经指出任务的开销大小对并行任务的影响。如果任务很小那么由于并行管理的附加开销任务分配调度同步等成本可能并行执行并不是优化方案。这也是上述程序For效率高出的原因。 如果在循环体内执行向数据库插入操作那么Parallel.For 效率就会高出在此我们认为每向数据库插入一条记录花费1毫秒时间将程序修改如下 class Program{static void Main(string[] args){Stopwatch sw new Stopwatch();sw.Start();ParallelLoopResult result Parallel.For(0, 10, i {Console.Write();Thread.Sleep(1);});sw.Stop();TimeSpan ts2 sw.Elapsed;Console.WriteLine(Parallel.For总共花费{0}ms., ts2.TotalMilliseconds);//Stopwatch sw_Eq new Stopwatch();sw_Eq.Start();for (int i 0; i 10; i){Console.Write();Thread.Sleep(1);}sw_Eq.Stop();TimeSpan tssw_Eq sw_Eq.Elapsed;Console.WriteLine(for总共花费{0}ms., tssw_Eq.TotalMilliseconds);Console.ReadKey();}} } 执行结果大大改变 相信到此大家应该明白了吧也就说For是同步Parallel.For 是异步执行。当然我们也可以使用Thread实现异步编程 代码如下 class Program{static void Main(string[] args){Console.WriteLine(主线程测试开始..);Thread th new Thread(ThMethod);th.Start();Thread.Sleep(1000);Console.WriteLine(主线程测试结束..);Console.ReadLine();}static void ThMethod(){Console.WriteLine(异步执行开始);for (int i 0; i 5; i){Console.WriteLine(异步执行 i.ToString() ..);Thread.Sleep(1000);}Console.WriteLine(异步执行完成);}} Parallel.ForEach 和 ForEach  与 Parallel.For 和 For 一样一个是异步执行开辟多个线程。一个是同步执行开辟一个线程。因此效率方面同上主要看执行的什么任务在此不作具体说明。 下面写了一些代码从下面的代码中我们可以看出Parallel.ForEach具体开辟了几个线程如下 class Program{static void Main(string[] args){int[] intList new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };ParallelLoopResult result Parallel.ForEach(intList, (s,pls,longs) {Console.WriteLine(longs s);pls.Stop();if (pls.IsStopped){Parallel.Invoke(Gs,Ks);//异步调用多个方法}});Console.ReadKey();}public static void Gs(){Console.WriteLine(异步方法1);}public static void Ks(){Console.WriteLine(异步方法2);}} 上述代码中调用了Stop()方法我们都知道如果是同步执行的调用Stop()后会立即停止执行那么程序只会输出索引值为0的结果。而在异步中不是这样的异步迭代是多线程且没有顺序的。其执行结果如下 多次执行的结果可能不同。 如上图所示第一个图开辟了三个线程执行顺序为 0 2 1第二个图开辟了两个线程执行顺序为1 0  下面的Invoke()方法是异步调用其他的方法在此不作解释可参考C# Invoke() 设置开启的线程的个数 Parallel.ForEach(NameArray,new ParallelOptions{MaxDegreeOfParallelism3},(item,pls,i){}); 陈卧龙的博客
http://www.ihoyoo.com/news/56090.html

相关文章:

  • 网站建设 蜀美网络sem竞价托管代运营
  • jsp网站建设模板下载o2o商城网站建设
  • 做这个网站多少钱wordpress设置可写
  • 专业的培训行业网站制作推广公司怎么做
  • 建网站需要服务器吗手机网站开发实例
  • 做汽车拆解视频网站福永响应式网站建设
  • 网站更新提示怎末做新乡哪里有做网站的
  • 织梦网站如何做seo四川网站建设电话咨询
  • 网站建设工作计划表关于军队建设网站
  • 开锁公司做网站留言墙 wordpress
  • 工信部网站用户名赵县住房和城乡建设局网站
  • 电商网站建设论文建站如何收费
  • 宁德东侨建设局网站网站建设 锐颖科技
  • 网站建设价格在哪济南兴田德润优惠吗天津注册公司优惠政策
  • 网站建设辅助无人高清影视在线观看
  • 全国做的最棒的网站软件开发专业有哪些
  • 怎么搭建Wordpress博客有没有专业收费做网站优化的
  • 国家建设协会官方网站图片搜索引擎
  • 戚墅堰常州做网站iis7配置多个网站
  • 国外的域名注册网站抚顺网站建设费用
  • 购物网站建设的选题意义2013网站建设方案
  • 照明网站建设怎么自己制作游戏
  • 内蒙古网站备案网易企业邮箱登录入口手机网页版
  • 手机能建网站不北京商城网站建设
  • 深圳网站上线方案哪些网站不扣流量
  • 网吧可以做网站吗国家建设厅官方网站
  • 英文网站接单做翻译做网站个网站要多少钱
  • 站群朝阳区搜索优化seosem
  • 专门做建筑设计图库的网站设计广东seo点击排名软件哪家好
  • 代价网站建设小江seo