考虑在一个包含Doubles
. 只要我愿意,请执行以下操作:
- 从结构中随机选择两个不同的列表
- 根据这些列表计算统计数据
- 根据该统计数据掷硬币
- 可能根据抛硬币的结果修改其中一个列表
目标是最终实现收敛,因此“解决方案”在迭代次数上是线性的。可以在此处的 SO 问题中看到此过程的实现,这是一个直观的可视化:
似乎可以更好地执行此过程 - 也就是说,可以更快地实现收敛 - 通过使用多个在单独的 OS 线程上同时执行的工作人员,例如:
我想一个完美实现的实现应该能够在O(n/P)时间内实现解决方案,因为P是可用计算资源的数量。
阅读 Haskell 并发让我头晕目眩,诸如、、、、等等之类的术语。MVar
似乎很清楚的是,这个过程的并发实现看起来与我上面链接的完全不同。但是,该过程本身似乎本质上是一个相当驯服的算法,它本质上是一个内存数据库,我敢肯定有人以前遇到过这个问题。TVar
TChan
acid-state
我猜我将不得不使用某种支持体面随机访问(即随机空闲元素)和修改的可变并发数据结构。当我尝试将这可能需要的所有东西拼凑起来以提高性能时,我有点迷失了(例如,STM 似乎很可疑)。
如果目标是提高顺序实现的性能,哪些数据结构、并发概念等适合此类任务?