请问线程池是否就和数据库连接池一样是由.net framework自动管理的创建一个新的线程后,只管启动他停止他,等等其他的就都不用由自己做操作?

解决方案 »

  1.   

    ThreadPool是一个类//创建一个新的线程后,只管启动他停止他,等等
    //其他的就都不用由自己做操作?
    没错,但是与线程池没关系
      

  2.   

    线程池和连接池还是有一点不一样:
    线程池你只是通过delegate创建一个工作任务,并且把这个任务queue到池中,池根据资源和先后顺序依次调度每个delegate。另外你可以传递一个状态到delegate中。具体线程的分配、调度是不需要你干预的。而且这种任务往往应该是较快完成的任务,而最好不要是循环处理等类型的“长期”任务。其他基本有点类似吧。
      

  3.   

    线程池与数据库连接池完全不同线程池可用于发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器许多应用程序创建的线程都要在休眠状态中消耗大量时间,以等待事件发生。其他线程可能进入休眠状态,只被定期唤醒以轮询更改或更新状态信息。线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程。一个线程监视排到线程池的若干个等待操作的状态。当一个等待操作完成时,线程池中的一个辅助线程就会执行对应的回调函数。也可以将与等待操作不相关的工作项排列到线程池。若要请求由线程池中的一个线程来处理工作项,请调用 QueueUserWorkItem 方法。此方法将对将被从线程池中选定的线程调用的方法或委托的引用用作参数。一个工作项排入队列后就无法再取消它。计时器队列中的计时器以及已注册的等待操作也使用线程池。它们的回调函数也会排列到线程池。线程池在首次创建 ThreadPool 类的实例时被创建。线程池具有每个可用处理器 25 个线程的默认限制,这可以使用 mscoree.h 文件中定义的 CorSetMaxThreads 来更改。每个线程使用默认的堆栈大小并按照默认的优先级运行。每个进程只能具有一个操作系统线程池。