1 2

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();
        }
    }

执行结果:

 

posted @ 2024-04-24 15:24  大海的泡沫  阅读(146)  评论(0编辑  收藏  举报
1 2