适用于大型,频繁变化的浮子序列的Haskell类型

rlk*_*024 3 haskell

我必须选择一个带有16K元素的浮点序列的类型.这些值将经常更新,可能每秒更新一次.

我已经在数组上阅读了wiki页面.以下是我到目前为止得出的结论.(如果有任何错误,请纠正我.)

  1. 在这种情况下,IArrays会慢得令人无法接受,因为它们会在每次更改时被复制.阵列中有16K浮点数,每次复制64KB内存.

  2. IOArrays可以做到这一点,因为它们可以在不复制所有数据的情况下进行修改.在我的特定用例中,在IO monad中进行所有更新根本不是问题.但它们是盒装的,这意味着额外的开销,这可能会增加16K元素.

  3. IOUArrays看起来非常合适.与IOArrays一样,它们不需要在每次更改时都有完整的副本.但与IOArrays不同,它们是未装箱的,这意味着它们基本上是Haskell等效的C系列浮点数.我意识到他们很严格.但我不认为这是一个问题,因为我的应用程序永远不需要访问任何少于整个数组的东西.

我是否正确地期待IOUArrays?

另外,假设我后来想要从多个线程读取或写入数组.我会用IOUArrays支持自己吗?或者IOUArrays的选择与并发问题完全正交?(我还不熟悉Haskell中的并发原语以及它们如何与IO monad交互.)

Gab*_*lez 5

一个好的经验法则是,你应该总是使用vector图书馆,而不是阵列.在这种情况下,你可以使用可变矢量从Data.Vector.Mutable模块.

您需要的关键操作是read,write它允许您可变地读取和写入可变向量.

  • @Jarrett Vastly更多选择功能和流融合. (2认同)