zoukankan      html  css  js  c++  java
  • 使用ThreadPool代替Thread

    线程的空间开销

    1. 线程内核对象。包含上下文信息。32位系统占用700字节
    2. 线程环境块。包括线程的异常处理链。32位系统占用4KB
    3. 用户模式栈。保存方法的参数、局部变量和返回值
    4. 内核模式栈。调用操作系统的内核模式函数时,系统会将函数参数从用户模式栈复制到内核模式栈。32位系统占用12KB

    线程的时间开销

    1. 创建时,系统相继初始化上述内存空间
    2. CLR加载DLL到DLLMain方法,并传送连接标志
    3. 线程上下文切换
      1. 进入内核模式
      2. 将上下文信息保存到正在执行的线程内核对象上
      3. 系统获取一个Spinlock,并确定下一个要执行的线程。释放Spinlock。如果下一个线程不在同一个进程,则需要进行虚拟地址交换
      4. 从将被执行的线程内核对象上载入上下文信息
      5. 离开内核模式

    使用线程池,CLR不会销毁这个线程,而是会保留这个线程一段时间。

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var p = new Program();
                Stopwatch sw = new Stopwatch();
                sw.Start();
                p.Thread();
                sw.Stop();
                Console.WriteLine(sw.ElapsedTicks);
                sw.Restart();
                p.Pool();
                sw.Stop();
                Console.WriteLine(sw.ElapsedTicks);
                Console.ReadKey();            
            }
    
            void Thread()
            {
                for (int i = 0; i < 10; i++)
                {
                    var worker = new Thread(() =>
                    {
                        //Console.WriteLine("Thread Do");
                    });
                    worker.Start();
                }
            }
    
            void Pool()
            {
                for (int i = 0; i < 10; i++)
                {
                    ThreadPool.QueueUserWorkItem(state =>
                    {
                        //Console.WriteLine("Pool Do");
                    });
                }
            }
        }
    }
  • 相关阅读:
    start internal web server in .net 2.0
    windows scripts tips
    move vs2k3 to vs2k5
    w2k telnet port change
    Webservice自动表生成TableForGen
    用C#改写Head First Design PatternsSingleTon(原创)
    使用反射创建动态模块
    使用反射将委托挂钩
    用C#改写Head First Design PatternsState(原创)
    用Xmlhttp无刷新更新DIV
  • 原文地址:https://www.cnblogs.com/goodspeed/p/4068725.html
Copyright © 2011-2022 走看看