繁体   English   中英

使用ThreadPool.QueueUserWorkItem和使用System.Thread有什么区别? [重复]

[英]what is the difference between using ThreadPool.QueueUserWorkItem and using System.Thread? [duplicate]

可能重复:
使用Thread.Start与QueueUserWorkItem的优势

如果我想通过线程执行方法,那么我通常会这样使用System.Thread

 Thread th = new Thread(Test_Progress);
 th.Start();

但是我的同事告诉我,像下面这样使用ThreadPool.QueueUserWorkItem更好

ThreadPool.QueueUserWorkItem(new WaitCallback(Test_Progress),(object)true );

那么性能和处理方式有什么区别吗?

线程是创建对象的昂贵对象,使用线程池是在单独的线程上执行快速工作的一种更好的方法,而无需处理创建新线程的全部成本。

此外,您还要确保不会对池线程执行很长的执行操作,因为您可能会耗尽池中有限数量的线程。

您应该阅读位于此处的有关线程池的MSDN文档: http : //msdn.microsoft.com/zh-cn/library/0ka9477y.aspx

它将解释一些在决定使用什么时要记住的事情。

ThreadPoolThreadPool池(集合),使用它将从该池中选择一个线程并在该线程内执行您的方法,其中Thread对象创建了新的Thread。 这是围绕对象池的一般概念,即当您在应用程序中需要使用多个对象时,一个选择是创建这些对象的池,然后从该池中选择对象,然后将其放回池中,这是在那些对象中完成的。在这种情况下,对象创建很昂贵,这也导致更好的可伸缩性。 对于线程而言,如果您的应用程序创建了许多线程,则由于上下文切换,它的爬网速度将非常慢,因此,首选使用线程池。 相同概念的另一个示例是SQL连接池。

如果您有许多短期任务,请使用线程池。 如果只有很少的且长时间运行的任务,则线程的使用会更好。

线程的使用使您可以更好地控制任务,而胎面池的使用可以使事情变得更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM