c# 多線程控制最大線程數

假定現在存在一個對象數組,需要對數組中的每個對象進行分析,但是分析存在較長的耗時處理,那麼單線程處理就顯得很侷限了,這裏就採用多線程處理,但是多線程要控制最大線程數量。

線程與線程之間有會爭取 CPU 資源,這就會導致上下文切換,上下文切換過多,必然增加線程的執行時間,影響了整體執行效率,所以設置過多的線程,會讓cpu把更多的時間浪費在上下文切換中,效率反而降低了。

這裏我們假定開15個線程。

class Program
    {
        static StringBuilder sb = new StringBuilder();
        static int maxThreadNum = 15;
        static List<Task> tasks = new List<Task>();
        static TaskFactory taskFactory = new TaskFactory();
        static void Main(string[] args)
        {
            for (int i = 0; i < 100; i++)
            {
                var ii = i;
                     tasks.Add(taskFactory.StartNew(() =>
                    {
                        var s = Todoing(ii);
                        sb.Append(s+",");
                    }));
                if (tasks.Count >= maxThreadNum)
                {
                    Task.WaitAny(tasks.ToArray());
                    tasks = tasks.Where(f => f.Status == TaskStatus.Running).ToList();

                }
            }
            //循環完,等待剩餘線程全部執行完成
            Task.WaitAll(tasks.ToArray());
            var sbstring = sb.ToString();
            Console.WriteLine(sbstring);
            Console.WriteLine(sbstring.Split(",").Length);
            Console.ReadKey();
        }

        static private string Todoing(int i)
        {
            Thread.Sleep(500);
            return i.ToString();
        }
    }

執行結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章