首页 > 代码库 > 线程池 和 多线程执行时间比较

线程池 和 多线程执行时间比较

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 线程池
{
    class Program
    {
        static void Main(string[] args)
        {
            //WaitCallback
            //线程池线程都是后台线程
            //线程池的线程优势:线程可以进行重用,提高了线程的利用率
            //线程池找一个空闲线程给我们执行这个任务,当任务完成后,线程不立即释放
            //而是回到线程池,继续做其它的任务
            //线程切换消耗资源,cpu再切换线程的时候,需要把当前线程执行的状态保持到寄存器中。
            //线程创建非常消耗资源。线程创建非常满,占用大量的内存空间。每个线程最小1M内存开销。
            //因为操作系统切换线程需要消耗大量的时间和资源,所以不一定线程越多执行效率越高
            //线程池中的最大线程书:1024 默认1000个
            //最小的线程数:4,默认是4个(根据cpu不同而不同)
            //1核心:255个线程,4*255=1000
            ThreadPool.QueueUserWorkItem((s) => {
                Console.WriteLine(s);
            }, "jj");

            #region 比较线程和线程池的速度
            Stopwatch sp = new Stopwatch();
            sp.Start();
            for (int i = 0; i < 100;i++ )
            {
                new Thread(() => { 
                    int mm = i * 2 + 2 - 3 * 3;
                });
            }
            sp.Stop();
            Console.WriteLine("一百个线程花费的毫秒数:"+sp.Elapsed.TotalMilliseconds);
            sp.Restart();
            for (int j = 0; j < 100;j++ )
            {
                ThreadPool.QueueUserWorkItem((s) => {
                    int nn = j * 2 + 2 - 3 * 3;
                });
            }
            sp.Stop();
            Console.WriteLine("线程池花费的毫秒数:"+sp.Elapsed.TotalMilliseconds);
            #endregion
            Console.ReadKey();
        }
    }
}

 

线程池 和 多线程执行时间比较