[英]Haskell concurrency and persistence
我一直在閱讀有關Haskell和STM的Beautiful Concurrency文章。
給出的示例是銀行帳戶轉帳。
它是一個虛擬的銀行轉賬 - 它位於堆內存中的兩個數字之間。
我腦子里立即提出的問題是:
如何以原子方式轉移磁盤。 在以持久性 - ACID方式記錄銀行交易之前,我的書中沒有這樣做。 人們如何使用像Haskell這樣的語言 - 它不會讓你在STM中做任何IO - 實際上真的會對不僅在易失性存儲器中的數據進行原子變化嗎?
如何在許多機器上分發它; 你怎么能有分布式事務和橫向擴展應用程序(STM中沒有IO)?
STM用於線程同步和通信, 而不是用於持久存儲數據。 換句話說,STM旨在讓線程在它們之間共享數據而不會出現死鎖或競爭條件。 或者讓線程相互發送信號。 或者基本上是協調線程活動。
如果要將持久數據存儲在磁盤上,請使用數據庫。 MySQL,PostgreSQL,Oracle等等。有一百萬可供選擇。 這不是STM旨在解決的問題。
對於分布式處理......我們仍在努力。 我並沒有密切關注這些事情,以評論這與現實的接近程度。
人們如何使用像Haskell這樣的語言 - 它不會讓你在STM中做任何IO - 實際上真的會對不僅在易失性存儲器中的數據進行原子變化嗎?
通過IO中的庫或類似的效果類型。 例如ACID或“MACID”系統。
如何在許多機器上分發它; 你怎么能有分布式事務和橫向擴展應用程序(STM中沒有IO)?
我不知道Haskell的分布式STM實現,但是Cloud Haskell是GHC的分布式編程模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.