2013-09-24 21 views
2

我正在研究Clojure中的併發編程。 http://clojure.org/concurrent_programmingClojure STM與原子和代理形式有關係嗎?

我知道原子REF形式用於維持編程狀態。

只有裁判用於協調更新,進行更改時,這樣dosync宏使用。

所以很顯然STM引擎在這一點上涉及到。

只是想清楚以下疑問我有,

是否Clojure的STM具有原子和代理的形式也有關係?或者是 他們剛剛利用了java.util.concurrent.atomic功能?一個dosync塊內調用時,才生效一次,(如果)的事務成功提交,

回答

5

的STM是與代理在sendsend-offsend-via。 STM和原子之間沒有任何關係。

+0

http://www.slideshare.net/SergeyStupin/clojure-concurrency-overview?from_search=1但它表示代理是獨立不協調的,交易只是爲了協調,不是嗎? – nish1013

+0

@ nish1013:向代理髮送消息是一個副作用。交易可能會多次嘗試,但您通常只需要一次副作用。 (特別是,爲了實現這種行爲,代理中的所有副作用操作(除了修改ref)都是有意義的。) –

+0

@MichałMarczyk「向代理髮送消息是一種副作用」爲什麼它是一個副作用?請解釋。而且,如果我們在事務中包含副作用事件,它可能會被觸發很多次,所以你的意思是,如果我們從特定事務中移除ref,它仍然可以正常工作,因爲它永遠不會重新觸發事務。不重新觸發的原因是其中沒有可變的內容。如果我們有一個參考,那麼它可能會在交易過程中發生變化,所以當涉及到提交階段時,這將被注意到,因此會重新觸發交易。我的理解是否正確? – nish1013