我在一些程序中使用了多个线程,但仍然感觉不太舒服.
C#/ .NET的多线程库有哪些,哪一个优于另一个?
通过多线程库,我的意思是一切有助于使多线程编程更容易.
你定期使用什么.NET集成(比如ThreadPool)?你遇到了哪些问题?
在应用程序中使用多个线程有多种原因:
UI响应
并发操作
并行加速
应该选择的方法取决于你想要做什么.例如,对于UI响应,请考虑使用BackgroundWorker
.
对于并发操作(例如服务器:一些不具备平行,但可能确实需要同时即使在单核系统),可以考虑使用线程池,或者,如果任务是长寿命和你需要很多,考虑每个任务使用一个线程.
如果你有一个所谓的令人尴尬的并行问题,可以很容易地分成小的子问题,可以考虑使用工作线程池(与CPU内核一样多的线程)从队列中提取任务.Microsoft 任务并行库(TPL)可能会有所帮助.如果作业可以很容易地表示为monadic流计算(即在LINQ中使用转换和聚合等工作进行查询),则在TPL之上运行的并行LINQ(相同链接)可能会有所帮助.
还有其他方法,例如在Erlang中看到的Actor风格的并行性,由于缺少绿色线程模型或实现相同的方法(如CLR支持的延续),因此在.NET中难以有效实现.