Haskell并发性和持久性

Wil*_*ill 5 concurrency haskell

我一直在阅读有关Haskell和STMBeautiful Concurrency文章.

给出的示例是银行帐户转帐.

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

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

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

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

Mat*_*hid 10

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

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

对于分布式处理......我们仍在努力.我并没有密切关注这些事情,以评论这与现实的接近程度.


Don*_*art 7

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

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

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

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