C#中简单的方法并行Parallel.Invoke比串行慢


using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        private Stopwatch stopWatch = new Stopwatch();
        static void Main(string[] args)
        {
            
            new Program().ParallelInvokeMethod();
        }

        public void Run1(string name)
        {
            Stopwatch stopWatch1 = new Stopwatch();
            Thread.Sleep(10);
            stopWatch1.Start();
            //for (int i = 0; i < 99999999; i++) { }
        Console.WriteLine(name+", Task 1 is cost "+ stopWatch1.ElapsedMilliseconds + " sec");
            //stopWatch1.Stop();
        }
        public void Run2(string last)
        {
            Thread.Sleep(20);
            Stopwatch stopWatch2 = new Stopwatch();
            stopWatch2.Start();
            //for (int i = 0; i < 99999999; i++) { }
            Console.WriteLine(last+", Task 2 is cost "+ stopWatch2.ElapsedMilliseconds + " sec");
            //stopWatch2.Stop();
        }

        public  void ParallelInvokeMethod()
        {
            stopWatch.Start();
            String name = "XXX";
            String last = "YYY";
            Parallel.Invoke(()=>Run1(name), ()=>Run2(last));
            stopWatch.Stop();
            Console.WriteLine("并行 run " + stopWatch.ElapsedMilliseconds + " ms.");

            stopWatch.Restart();
            Run1(name);
            Run2(last);
            stopWatch.Stop();
            Console.WriteLine("串行 run " + stopWatch.ElapsedMilliseconds + " ms.");
        }
    }
}

并发运行效果,比串行耗时还长,是因为创建了线程的时候需要耗时,那这个 Parallel.Invoke并行最多处理几秒钟以上的了,对于简单的并行是起不到效果。

img