怎么在c#中使用Parallelx实现并行和多线程编程

  介绍

本篇文章给大家分享的是有关怎么在c#中使用Parallelx实现并行和多线程编程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、平行的使用

1, Parallel.Invoke

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

在这里先讲一个知识点,就是秒表的使用,最近有一些人说找不到秒表,秒表到底是什么东西,今天就来说明一下。

秒表在系统。诊断命名控件,要使用它就要先引用这个命名空间。

其使用方法如下:

var  stopWatch =, new 秒表();,,,//创建一个秒表实例      stopWatch.Start();,,,//开始计时      stopWatch.Stop();,,,//停止计时      stopWatch.Reset();,,//重置秒表      stopWatch.Restart();,//重新启动被停止的秒表      stopWatch.ElapsedMilliseconds //获取秒表从开始到现在的时间差,单位是毫秒以前

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

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

public  class  ParallelDemo   ,{   ,private  Stopwatch  Stopwatch =, new 秒表();      ,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  +,“,女士!”);   ,   ,stopWatch.Restart ();   ,Run1 ();   ,Run2 ();   ,stopWatch.Stop ();   ,Console.WriteLine (“Normal  run “, +, stopWatch.ElapsedMilliseconds  +,“,女士!”);   ,}   }

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

怎么在c#中使用Parallelx实现并行和多线程编程

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

2,平行。

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

public  void  ParallelForMethod ()   ,{   ,stopWatch.Start ();   ,for  (int 小姐:=,0;,小姐:& lt;, 10000;,我+ +)   ,{   ,for  (int  j =, 0;, j  & lt;, 60000;, j + +)   ,{   int 才能;sum =, 0;   sum 才能+=,我;   ,}   ,}   ,stopWatch.Stop ();   ,Console.WriteLine (“NormalFor  run “, +, stopWatch.ElapsedMilliseconds  +,“,女士!”);      ,stopWatch.Reset ();   ,stopWatch.Start ();   ,Parallel.For (0,, 10000,, item =比;   ,{   ,for  (int  j =, 0;, j  & lt;, 60000;, j + +)   ,{   int 才能;sum =, 0;   +=sum 才能;项目;   ,}   ,});   ,stopWatch.Stop ();   ,Console.WriteLine (“ParallelFor  run “, +, stopWatch.ElapsedMilliseconds  +,“,女士!”);   ,   以前,}

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

怎么在c#中使用Parallelx实现并行和多线程编程

可以看的到,Parallel.For所用的时间比单纯的为快了1秒多,可见提升的性能是非常可观的。那么,是不是平行的。为在任何时候都比的要快呢?答案当然是“不”是,要不然微软还留为干着嘛?

下面修改一下代码,添加一个全局变量num,代码如下:

public  void  ParallelForMethod ()   ,{   ,var  obj =, new 对象();   ,long  num =, 0;   ,ConcurrentBag bag =, new  ConcurrentBag

怎么在c#中使用Parallelx实现并行和多线程编程