C# 创建并发程序的不同方法的差异
以下两者之间的区别是什么:C# 创建并发程序的不同方法的差异,c#,.net-4.0,C#,.net 4.0,以下两者之间的区别是什么: 开始新的线程 使用第三方物流 使用BackgroundWorker 所有这些都创建了并发性,但它们之间的底层区别是什么?这三个都是线程吗 感谢他们都在内部使用线程,不同之处在于每个API的抽象级别以及线程的使用方式。让我们重新排列一下您的列表,看看从最低到最高抽象级别的三种技术: 手动启动新线程: 这实际上在操作系统中创建了一个新线程。您的代码将在该线程上执行 使用后台工作人员: 在内部,它使用一种叫做.net的东西。线程池基本上是一个可用线程池。您的代码被分配到一个
感谢他们都在内部使用线程,不同之处在于每个API的抽象级别以及线程的使用方式。让我们重新排列一下您的列表,看看从最低到最高抽象级别的三种技术:
创建一个线程只是。。。生成一个线程,以与主进程线程并发运行 在TPL中,如果您创建一个任务,它将使用一个线程池来找到一个空闲线程来运行该任务。当您创建大量任务时,这可能会更有效,因为TPL能够在任意数量的空闲线程之间平衡负载(可能线程的数量是基于您拥有的内核的数量来平衡的,但我不确定这一点) 最后,BackgroundWorker在一个单独的线程上运行您的工作。它实际上只是一个很好的抽象,它将您从线程的混乱部分中移除,因为它是为您管理的。如果我没弄错的话,它还提供了一种发回状态更新的方法。(不确定这是否使用Windows线程池,但我不会感到惊讶) 最后,你必须选择适合你的课程,但是,TPL任务的目的是让您能够有效地调度可以并行运行的任务,而创建线程或使用后台工作线程对于长时间运行的操作或希望后台线程永远等待某个信号的场景可能更好(实际上,如果您只是在等待某个事件发出信号,我建议您使用RegisteredWait。)