2

我了解多线程的基本目的。我也知道我们可以使用异步编程模型,BackgroundWorkerComponent,或者简单地调用另一个线程上的任务来实现并发。但是我不明白这三种实现并发的方式之间的基本区别。谁能告诉我清楚。提前致谢。

4

1 回答 1

1

使用异步编程模型或 BackgroundWorker 组件,您正在使用两种不同的模型 (API) 在线程池线程上运行代码。

BackgroundWorker 的模型相当简单,但非常适合某些类型的任务。BackgroundWorker 遵循(过时的)基于事件的异步模式(EAP)。一般来说,我更喜欢 APM,除非该任务非常适合 BackgroundWorker。

使用线程池可能是有利的,因为创建线程存在一定的开销(例如为线程分配堆栈空间等)。

当您自己创建线程时,您并没有使用线程池线程(除非您调用适当的 API 来访问它)。因此,您需要支付创建线程的成本。如果您的线程运行时间相当长,这可能是一件合理的事情,因为成本在线程的生命周期内分摊,并且您不会消耗有限的线程池线程之一。

我会指出你的问题没有提到

基于任务的异步模式 (TAP)

http://msdn.microsoft.com/en-us/library/hh873175.aspx

推荐用于所有新开发。

于 2012-12-13T20:00:28.413 回答