C#4.0多线程循环: when to use,什么时候不用?

标签 c# loops

我正在尝试寻找使用 C# 4.0 线程循环的好方法。假设我现在有两个多维数组,宽度/高度为 8/5,即每个数组有 40 个元素。

通过我目前正在优化的一段代码,我遇到过几次这样的情况,我只是逐个元素地乘以这样的两个表(使用嵌套循环)

是否值得为这样的事情使用 4.0 的线程循环?如果不是,使用或不使用它的良好做法/大小估计是什么?

亲切的问候,

最佳答案

多线程嵌套循环的挑战是将工作和数据分离到独立的池中。如果您的循环在通过它们的过程中修改了数组,那么在拆分为多个线程时这将无法正常工作。如果您已经设置了循环以便输入数据是只读的,并且循环的输出进入不同的数据结构,那么多线程就有希望了。只读输入 + 本地化输出有利于多线程。

还有一个问题是每次循环迭代中发生了多少工作。您不会从每次迭代执行很少的循环的多线程中获得太多好处。在一个小的快速循环中,大部分挂钟时间将花在循环管理上,而不是花在工作本身上,使循环多线程化只会增加循环管理开销。如果您的循环在每次迭代中执行大量工作,那么您更有可能看到多线程的好处。

如果每次迭代工作包括文件 I/O 等阻塞操作,您可能会认为多线程循环会有所改善。在许多情况下,对文件 I/O 绑定(bind)循环进行多线程处理只会让事情变得更糟。这些文件 I/O 另一端的硬件设备通常不能更快地移动物理读/写头,因此要求它同时做更多的事情不会有任何好处。在尝试对循环进行多线程处理之前,您最好先研究使用异步文件 I/O。

最后,不要基于猜测多线程可能在哪些方面有所帮助来执行这些操作。在多线程之前和之后测量代码的性能。如果你找不到多线程有显着改善的情况,那就不要做。有时为了获得微小的改进而付出额外的努力和风险是不值得的。

关于C#4.0多线程循环: when to use,什么时候不用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9399572/

相关文章:

c# - 无法转换 MS.Internal.NamedObject

c# - 通用接口(interface)的通用工厂方法

java - 迭代数据结构和嵌套类

python - 循环遍历类实例列表

c# - 在排序列表 C# 中查找小于或等于 double 的项目位置的最快方法

c# - Android 到 Web 服务。未传递的值

c# - MoqMockingKernel : System. TypeLoadException:类型违反了继承安全规则

c# - 如何根据 wpf 中的值使特定颜色变暗或变亮?

r - Dataframe 列循环和基于 R 中条件的字符串连接(pref dplyr)

python - 在 python 中仅使用 for 循环模拟 while 循环