我一直在阅读有关Haskell和Beautiful Concurrency的STM文章。
给出的示例是银行转帐。
它是一个虚假的银行转账 - 它位于堆内存中的两个数字之间。
我脑子里立即提出的问题是:
原子转移如何击中磁盘。在以持久性ACID方式记录银行交易之前,我的书中没有这样做。人们如何使用像Haskell这样的语言 - 它不会让你在STM中做任何IO - 实际上真的会对不仅在易失性存储器中的数据进行原子变化吗?
如何在很多机器上分发它;你怎么能有分布式事务和横向扩展应用程序(在STM中没有IO)?
答案 0 :(得分:10)
STM用于线程同步和通信,不用于持久存储数据。换句话说,STM旨在让线程在它们之间共享数据而不会出现死锁或竞争条件。或者让线程相互发送信号。或者基本上是为了协调线程活动。
如果要将持久性数据存储在磁盘上,请使用数据库。 MySQL,PostgreSQL,Oracle等等。有一百万可供选择。这不是STM旨在解决的问题。
对于分发处理......我们仍然在努力。我并没有密切关注这些事情来评论它与现实的接近程度。
答案 1 :(得分:7)
人们如何使用像Haskell这样的语言 - 它不会让你在STM中做任何IO - 实际上真的会对不仅在易失性存储器中的数据进行原子变化吗?
通过IO中的库或类似的效果类型。例如。 ACID或"MACID"系统。
如何在许多机器上分发它;你怎么能有分布式事务和横向扩展应用程序(STM中没有IO)?
我不知道Haskell的分布式STM实现,但是Cloud Haskell是GHC的分布式编程模型。