2017-08-10 69 views
3

說,有4種成分:的Clojure:未來,代理人或core.async爲IO

  1. 通過HTTP交互數據集合(調查
  2. 原子,其累積調查階段
  3. cpu重計算
  4. 數據庫寫入器

我儘量做到最後兩個操作是asyncronous,就像在隊列中某處放置積累的數據,並開始收集等調查,而東西處理數據和別的確實IO與任何先前準備的數據。

的quesion是用什麼語言功能的?在Clojure的編程書有使用代理的組件來執行IO操作的例子,但並不期貨提供相同的「發射後不管」的設施?或者代理人仍然是一個像原子或裁判那樣的身份而不是演員?

回答

4

的試劑是用於可變狀態的容器,就像原子和參考文獻你發一個動作的代理,它是「射後不理」,與發送到該代理程序的每個動作將被執行只有一次(不同於功能swap! PED上的原子,並alter! S表示裁判的保證,從而可以可能會重試多次)。發送給代理的多個操作將按順序完成,而不是同時完成。

因此,I/O可以被安全地發送到代理的動作內進行。所以,一個代理可能是第4步的一個很好的候選者,因爲您希望每個數據庫只寫一次(從不重試)。

你將有一個單一的代理,代表你的數據庫狀態。在步驟#3中創建的每個將來/線程中,在執行計算之後,將操作發送給單獨代理,該操作將序列化操作,即使它們是從線程同時到達的。