C# 手动调用线程与线程池方式调用的开销对比

本文通过实现线程和线程池两种不同方式处理大量操作,对比了它们在执行时间和空间消耗上的表现,旨在揭示在不同场景下选择合适并发模型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UseThreads为手工线程

UseThreadPool为线程池方式

        static void Main(string[] args)
        {
            const int numberOfOperations = 500;
            var sw = new Stopwatch();
            sw.Start();
            UseThreads(numberOfOperations);
            sw.Stop();
            Console.WriteLine("execute time using threads: {0}", sw.ElapsedMilliseconds);
            //相对于上一种方式,可节约运行空间,但需支付更多的运行时间
            sw.Reset();
            sw.Start();
            UseThreadPool(numberOfOperations);
            sw.Stop();
            Console.WriteLine("execution time using threads: {0}", sw.ElapsedMilliseconds);

            Console.ReadKey();
        }

        static void UseThreads(int numberOfOperations)
        {
            using (var countdown = new CountdownEvent(numberOfOperations))
            {
                Console.WriteLine("scheduling work by creating threads");
                for(int i = 0; i < numberOfOperations; i++)
                {
                    var thread = new Thread(() =>
                    {
                        //Console.Write("{0},", Thread.CurrentThread.ManagedThreadId);
                        Thread.Sleep(TimeSpan.FromSeconds(0.1));
                        countdown.Signal();
                    });
                    thread.Start();
                }
                countdown.Wait();
                Console.WriteLine();
            }
        }

        static void UseThreadPool(int numberOfOperations)
        {
            using (var countdown = new CountdownEvent(numberOfOperations))
            {
                Console.WriteLine("startingt work on a threadpool");
                for(int i = 0; i < numberOfOperations; i ++)
                {
                    ThreadPool.QueueUserWorkItem(_ => 
                    {
                        //Console.WriteLine("{0},", Thread.CurrentThread.ManagedThreadId);
                        Thread.Sleep(TimeSpan.FromSeconds(0.1));
                        countdown.Signal();
                    });
                }
                countdown.Wait();
                Console.WriteLine();
            }
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值