.NET Framework 4.0中的TPL(Task Parallel Library)支持了并行化计算,可合理地运用在实际项目开发过程中,以提高程序的执行效率。

1、Parallel.For循环

     本例分别对普通遍历求和计算NoParallel,无同步Lock的并行化求和计算ParallelNoLock和并行化求和有同步的Lock并行化求和计算ParallelLock执行了5次计算,这三个方法都做相同的事情,就是计算1-20的和并在每次循环后线程休眠50毫秒(模拟真实大运算环境),程序代码及运行结果如下:

class A
{
    //普通遍历求和计算
    public void NoParallel(int times) 
    {
        Stopwatch sw = Stopwatch.StartNew();
        int result = 0;
        for (int i = 0; i < times; i++) {
            result += i;
            Thread.Sleep(50);  //为模拟大量计算,线程休眠50毫秒,下同
        }
        Console.WriteLine("普通遍历,结果:{0},耗时:{1}毫秒",result,sw.ElapsedMilliseconds);
    }

    //使用了并行化求和计算,没有同步Lock
    public void ParallelNoLock(int times)
    {
        Stopwatch sw = Stopwatch.StartNew();
        int result = 0;
        Parallel.For(0, times, i => {
            result += i;
            Thread.Sleep(50);
        });
        Console.WriteLine("并行遍历(无Lock),结果:{0},耗时:{1}毫秒", result, sw.ElapsedMilliseconds);
    }

    private Object syncHandle = new object();

    //使用了并行化求和计算,使用了同步Lock
    public void ParallelLock(int times)
    {
        Stopwatch sw = Stopwatch.StartNew();
        int result = 0;
        Parallel.For(0, times, i => {
            lock (syncHandle)
            {
                result += i;
            }
            Thread.Sleep(50);
        });
        Console.WriteLine("并行遍历(有Lock),结果:{0},耗时:{1}毫秒", result, sw.ElapsedMilliseconds);
    }

}

//调用
A a = new A();

Console.WriteLine("普通遍历=>");
for (int i = 0; i < 5; i++)
{
    a.NoParallel(20);
}

Console.WriteLine("并行遍历(无Lock)=>");
for (int i = 0; i < 5; i++)
{
    a.ParallelNoLock(20);
}

Console.WriteLine("并行遍历(有Lock)=>");
for (int i = 0; i < 5; i++)
{
    a.ParallelLock(20);
}
View Code

相关文章:

  • 2021-12-31
  • 2021-08-01
  • 2021-12-26
  • 2021-08-05
  • 2021-10-03
猜你喜欢
  • 2022-12-23
  • 2021-10-18
  • 2022-01-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案