考虑一下包含Doubles集合的数据结构上的这个顺序过程(为了简单,称它们为列表)。只要我愿意,就做:
目标是最终实现对某物的收敛,因此“解决方案”的迭代次数是线性的。这个过程的一个实现可以在SO问题这里中看到,下面是一个直观的可视化:

似乎可以更好地执行这一过程--也就是说,可以更快地实现收敛--使用几个工作人员在不同的OS线程上同时执行,例如:

我想一个完全实现的实现应该能够在O(n/P)时间内实现一个解决方案,因为P是可用的计算资源的数量。
读了Haskell并发性,我对MVar、TVar、TChan、acid-state等术语感到头晕目眩。似乎很清楚的是,这个过程的并行实现看起来与我在上面链接的那个非常不同。但是,这个过程本身在本质上似乎是一个相当温和的算法,本质上是一个内存中的数据库,这是一个问题,我肯定有人曾经遇到过。
我猜我将不得不使用某种可更改的并发数据结构来支持体面的随机访问(即对随机空闲元素的访问)&修改。当我试图拼凑出为了提高性能而可能需要的所有东西时,我有点迷失了(例如,STM看起来有点可疑)。
如果目标是提高性能而不是顺序实现,那么什么样的数据结构、并发概念等适合于这类任务?
发布于 2012-05-16 23:16:07
保持简单:
你以后可以试试那些更漂亮的东西。对于原始性能,首先要保持简单:减少锁的数量(例如,每个缓冲区一个);确保编译代码并使用线程运行时(ghc -O2),您应该有一个很好的开始。
RWH对并发Haskell的包括基本知识有一章介绍。
https://stackoverflow.com/questions/10627980
复制相似问题