我试图找到使用C#4.0线程循环的好方法.假设我现在有两个阵列,多维,宽度/高度为8/5,即每个阵列有40个元素.
通过我目前正在优化的一段代码,我遇到了几次这样的情况,我只是按元素这样两个表(使用嵌套循环)
是否值得使用4.0的线程循环这样的事情?如果没有,使用与否的良好做法/规模估计是什么?
亲切的问候,
多线程嵌套循环的挑战是将工作和数据分离到独立的池中.如果你的循环在数组进展过程中修改了数组,那么当拆分为多个线程时,这将无法正常工作.如果您已经设置了循环以使输入数据是只读的,并且循环的输出进入不同的数据结构,那么就有希望进行多线程处理.只读输入+本地化输出适用于多线程.
还有每个循环迭代中发生了多少工作的问题.你不会从多线程中获得很多好处,这个循环每次迭代都很少.小型快速循环中的大多数挂钟时间将用于循环管理,而不是工作本身,并且使循环多线程只会增加循环管理开销.如果你的循环每次迭代都做了大量的工作,你就有更好的机会从多线程中获益.
如果每次迭代工作包括阻塞操作(如文件I/O),您可能会认为循环多线程会改进.在许多情况下,对文件I/O绑定循环进行多线程处理只会使事情变得更糟.这些文件I/O另一端的硬件设备通常不能更快地移动物理读/写头,因此要求它同时做更多的事情是不会有任何好处的.在尝试多线程循环之前,最好调查使用异步文件I/O.
最后,不要基于猜测多线程可能有用的地方来做任何这些.在多线程之前和之后测量代码的性能.如果你找不到多线程有显着改进的情况,那么就不要这样做.为了有时获得微小的改善,不值得额外的努力和风险.