Haskell并发性和持久性

时间:2013-04-04 07:16:08

标签: haskell concurrency

我一直在阅读有关Haskell和Beautiful ConcurrencySTM文章。

给出的示例是银行转帐。

它是一个虚假的银行转账 - 它位于堆内存中的两个数字之间。

我脑子里立即提出的问题是:

  1. 原子转移如何击中磁盘。在以持久性ACID方式记录银行交易之前,我的书中没有这样做。人们如何使用像Haskell这样的语言 - 它不会让你在STM中做任何IO - 实际上真的会对不仅在易失性存储器中的数据进行原子变化吗?

  2. 如何在很多机器上分发它;你怎么能有分布式事务和横向扩展应用程序(在STM中没有IO)?

2 个答案:

答案 0 :(得分:10)

STM用于线程同步和通信,用于持久存储数据。换句话说,STM旨在让线程在它们之间共享数据而不会出现死锁或竞争条件。或者让线程相互发送信号。或者基本上是为了协调线程活动。

如果要将持久性数据存储在磁盘上,请使用数据库。 MySQL,PostgreSQL,Oracle等等。有一百万可供选择。这不是STM旨在解决的问题。

对于分发处理......我们仍然在努力。我并没有密切关注这些事情来评论它与现实的接近程度。

答案 1 :(得分:7)

  

人们如何使用像Haskell这样的语言 - 它不会让你在STM中做任何IO - 实际上真的会对不仅在易失性存储器中的数据进行原子变化吗?

通过IO中的库或类似的效果类型。例如。 ACID或"MACID"系统。

  

如何在许多机器上分发它;你怎么能有分布式事务和横向扩展应用程序(STM中没有IO)?

我不知道Haskell的分布式STM实现,但是Cloud Haskell是GHC的分布式编程模型。