• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

c# 并行和多线程编程——认识Parallel

c# 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

随着多核时代的到来,并行开发越来越展示出它的强大威力!使用并行程序,充分的利用系统资源,提高程序的性能。在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threading.Tasks。这里面有很多关于并行开发的东西,今天第一篇就介绍下最基础,最简单的——认识和使用Parallel。

一、 Parallel的使用

在Parallel下面有三个常用的方法invoke,For和ForEach。

1、Parallel.Invoke

这是最简单,最简洁的将串行的代码并行化。

在这里先讲一个知识本文来源gaodaimacom搞#^代%!码网@点,就是StopWatch的使用,最近有一些人说找不到StopWatch,StopWatch到底是什么东西,今天就来说明一下。

StopWatch在System.Diagnostics命名控件,要使用它就要先引用这个命名空间。

其使用方法如下:

var stopWatch = new StopWatch();   //创建一个Stopwatch实例

stopWatch.Start();   //开始计时

stopWatch.Stop();   //停止计时

stopWatch.Reset();  //重置StopWatch

stopWatch.Restart(); //重新启动被停止的StopWatch

stopWatch.ElapsedMilliseconds //获取stopWatch从开始到现在的时间差,单位是毫秒

本次用到的就这么多知识点,想了解更多关于StopWatch的,去百度一下吧,网上有很多资料。

下面进入整体,开始介绍Parallel.Invoke方法,废话不多说了,首先新建一个控制台程序,添加一个类,代码如下:

public class ParallelDemo
 {
 private Stopwatch stopWatch = new Stopwatch();

 public void Run1()
 {
 Thread.Sleep(2000);
 Console.WriteLine("Task 1 is cost 2 sec");
 }
 public void Run2()
 {
 Thread.Sleep(3000);
 Console.WriteLine("Task 2 is cost 3 sec");
 }

 public void ParallelInvokeMethod()
 {
 stopWatch.Start();
 Parallel.Invoke(Run1, Run2);
 stopWatch.Stop();
 Console.WriteLine("Parallel run " + stopWatch.ElapsedMilliseconds + " ms.");
 
 stopWatch.Restart();
 Run1();
 Run2();
 stopWatch.Stop();
 Console.WriteLine("Normal run " + stopWatch.ElapsedMilliseconds + " ms.");
 }
}

代码很简单,首先新加一个类,在类中写了两个方法,Run1和Run2,分别等待一定时间,输出一条信息,然后写了一个测试方法ParallelInvokeMethod,分别用两种方法调用Run1和Run2,然后在main方法中调用,下面来看一下运行时间如何:

大家应该能够猜到,正常调用的话应该是5秒多,而Parallel.Invoke方法调用用了只有3秒,也就是耗时最长的那个方法,可以看出方法是并行执行的,执行效率提高了很多。

2、Parallel.For

这个方法和For循环的功能相似,下面就在类中添加一个方法来测试一下吧。代码如下:

public void ParallelForMethod()
 {
 stopWatch.Start();
 for (int i = 0; i < 10000; i++)
 {
 for (int j = 0; j < 60000; j++)
 {
  int sum = 0;
  sum += i;
 }
 }
 stopWatch.Stop();
 Console.WriteLine("NormalFor run " + stopWatch.ElapsedMilliseconds + " ms.");

 stopWatch.Reset();
 stopWatch.Start();
 Parallel.For(0, 10000, item =>
 {
 for (int j = 0; j < 60000; j++)
 {
  int sum = 0;
  sum += item;
 }
 });
 stopWatch.Stop();
 Console.WriteLine("ParallelFor run " + stopWatch.ElapsedMilliseconds + " ms.");
 
 }

写了两个循环,做了一些没有意义的事情,目的主要是为了消耗CPU时间,同理在main方法中调用,运行结果如下图:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:c# 并行和多线程编程——认识Parallel

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址