将.NET类库转换为多线程.NET类库的最佳实践

ile*_*eon 5 .net c# multithreading class-library

我有一些C#类库,它们的设计没有考虑并发,多线程,锁等等......

代码结构非常好,易于扩展,但它可以从多线程中受益匪浅:它是一组科学/工程库,需要在非常短的时间内执行数十亿次计算(现在它们不会带来好处从可用的核心).

我想将所有这些代码转换为一组多线程库,但我不知道从哪里开始,我没有任何以前的经验.

我可以使用任何可用的帮助,以及任何建议/建议.

Joh*_*ers 9

我的建议是不要这样做.您没有编写要并行使用的代码,因此它不会起作用,并且它将以难以调试的方式失败.

相反,我建议您提前决定该代码的哪一部分可以从并行性中受益最多,然后从头开始重写该代码并行.您可以利用在您面前拥有未修改的代码,也可以利用现有的自动化测试.

使用.NET 4.0 任务并行库可能会使工作更轻松,但它不会完全弥合未设计为并行的代码与代码之间的差距.


Ree*_*sey 5

我强烈建议您查看.NET 4和任务并行库(也可以通过Rx Framework在.NET 3.5sp1中使用).

它使许多并发问题变得非常简单,特别是数据并行性变得非常简单.由于您在大多数科学/工程图书馆处理大型数据集,因此数据并行性通常是可行的方法......

对于一些参考资料,特别是关于数据并行性和有关分解和解决问题的背景,您可能想阅读我在.NET 4中的Parallelism博客系列.