Parallel.Invoke的用法

using System;
using System.Threading.Tasks;

namespace AppCode
{
    class Program
    {
        static object obj = new object();
        static long lvalue = 0;
        static void Main(string[] args)
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

            Console.ForegroundColor = ConsoleColor.Red;
            stopwatch.Start();
            Call();
            Call1();
            Call2();
            Console.WriteLine("串行總用   " + stopwatch.ElapsedMilliseconds + "ms");



            
            stopwatch = new System.Diagnostics.Stopwatch();
            Console.ForegroundColor = ConsoleColor.Green;
            stopwatch.Start();
            Parallel.Invoke(Call, Call1, Call2);
            Console.WriteLine("並行總用   " + stopwatch.ElapsedMilliseconds + "ms");

            //這一段是最大並行度 MaxDegreeOfParallelism=1次,結果其實就是串行的結果
            stopwatch = new System.Diagnostics.Stopwatch();
            Console.ForegroundColor = ConsoleColor.DarkRed;
            stopwatch.Start();
            Parallel.Invoke(new ParallelOptions { MaxDegreeOfParallelism=1 },Call, Call1, Call2);
            Console.WriteLine("並行的第一種用法,最大並行度1次,並行總用   " + stopwatch.ElapsedMilliseconds + "ms");


            //這一段是最大並行度多次 MaxDegreeOfParallelism=2,MaxDegreeOfParallelism這個可以根據需要設置
            stopwatch = new System.Diagnostics.Stopwatch();
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            stopwatch.Start();
            Parallel.Invoke(new ParallelOptions { MaxDegreeOfParallelism = 2 }, Call, Call1, Call2);
            Console.WriteLine("並行的第一種用法,最大並行度多次,並行總用   " + stopwatch.ElapsedMilliseconds + "ms");


            //這一段沒有根據最大並行度配置,所以會自動調度系統資源,如cpu、內存,如果不配理想狀態下系統的內存、cpu會達到百分百
            stopwatch = new System.Diagnostics.Stopwatch();
            Console.ForegroundColor = ConsoleColor.DarkCyan;
            stopwatch.Start();
            Parallel.Invoke(() => Call(), () => Call1(), () => Call2());
            Console.WriteLine("並行的第二種用法,最大並行度多次,並行總用   " + stopwatch.ElapsedMilliseconds + "ms");

            //這一段沒有根據最大並行度配置,所以會自動調度系統資源,如cpu、內存,如果不配理想狀態下系統的內存、cpu會達到百分百
            stopwatch = new System.Diagnostics.Stopwatch();
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            stopwatch.Start();
            Parallel.Invoke(() =>
                {
                    Call();
                },
                Call1,
                delegate () { Call2(); Console.WriteLine("寫你想要的東西"); });
            Console.WriteLine("並行的第三種用法,最大並行度多次,並行總用   " + stopwatch.ElapsedMilliseconds + "ms");


            Console.Read();
        }

        private static void Call()
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

            stopwatch.Start();
            int temp = int.MaxValue / 100;
            string value = "";
            for (int i = 0; i < temp; i++)
            {
                value = i.ToString();
            }
            Console.WriteLine("第一次,循環" + temp + "次" + stopwatch.ElapsedMilliseconds + "ms");
        }

        private static void Call1()
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

            stopwatch.Start();
            int temp = int.MaxValue / 1000;
            string value = "";
            for (int i = 0; i < temp; i++)
            {
                value = i.ToString();
            }
            Console.WriteLine("第二次,循環" + temp + "次" + stopwatch.ElapsedMilliseconds + "ms");
        }

        private static void Call2()
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

            stopwatch.Start();
            int temp = int.MaxValue / 10000;
            string value = "";
            for (int i = 0; i < temp; i++)
            {
                value = i.ToString();
            }
            Console.WriteLine("第三次,循環" + temp + "次" + stopwatch.ElapsedMilliseconds + "ms");
        }
    }
}

發佈了13 篇原創文章 · 獲贊 0 · 訪問量 739
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章