gpt4 book ai didi

c# - Thread.Start() 与 ThreadPool.QueueUserWorkItem()

转载 作者:IT王子 更新时间:2023-10-29 03:56:19 28 4
gpt4 key购买 nike

Microsoft .NET 基类库提供了多种创建和启动线程的方法。基本上,调用与提供相同类型服务的所有其他调用非常相似:创建一个表示执行流(或更多)的对象,为其分配一个代表要执行的执行流的委托(delegate),最后,根据委托(delegate)签名,一个对象作为参数。

嗯,有两种方法(本质上):

1) 使用 System.Threading.Thread 类。

Thread curr = new Thread(myfunction); /* In a class, myfunction is a void taking an object */
curr.Start(new Object()); /* Or something else to be downcast */

2) 使用 System.Threading.ThreadPool 类。

ThreadPool.QueueUserWorkItem(myfunction, new Object()); /* Same philosophy here */

我应该使用 1) 或 2) 有什么特殊原因吗?

  • 性能原因?
  • 模式?
  • 什么是最好的方法?

我感觉答案是:“视情况而定”。您能否列出一种方法优于另一种方法的一些情况?

最佳答案

启动一个新线程可能是一个非常昂贵的操作。线程池重用线程,从而分摊成本。除非您需要专用线程,否则建议使用线程池。通过使用专用线程,您可以更好地控制线程特定属性,例如优先级、文化等。此外,您不应该在线程池上执行长时间运行的任务,因为它会强制池生成额外的线程。

除了您提到的选项之外,.NET 4 还提供了一些很棒的并发抽象。查看 Task 和 Parallel 类以及所有新的 PLINQ 方法。

关于c# - Thread.Start() 与 ThreadPool.QueueUserWorkItem(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192898/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com