5

我一直在阅读有关 Haskell 和STM的Beautiful Concurrency文章。

给出的示例是银行账户转账。

它是一个点头银行转账——它位于堆内存中的两个数字之间。

这立即在我脑海中提出的问题是:

  1. 该传输如何以原子方式撞击磁盘。直到银行交易以持久 - ACID - 方式记录之前,它还没有在我的书中发生。人们如何使用像 Haskell 这样的语言——它不允许你在 STM 中进行任何 IO——实际上是如何对数据进行原子更改,而不仅仅是在易失性内存中?

  2. 如何将其分发到多台机器上;您如何拥有分布式事务和横向扩展应用程序(STM 内部没有 IO)?

4

2 回答 2

10

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

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

对于分布式处理......我们仍在努力。我没有足够密切地关注这些事情,无法评论这与现实有多接近。

于 2013-04-04T07:44:08.620 回答
7

人们如何使用像 Haskell 这样的语言——它不允许你在 STM 中进行任何 IO——实际上是如何对数据进行原子更改,而不仅仅是在易失性内存中?

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

如何将其分发到多台机器上;您如何拥有分布式事务和横向扩展应用程序(STM 内部没有 IO)?

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

于 2013-04-04T07:39:19.200 回答