我是Clojure的新手。我有多個線程試圖寫入輸出流,如果我沒有錯誤的套接字和他們的流不是線程安全的意思是位可以混合起來,如果我寫他們同時。 clojure的主要優點之一是內置的併發處理競爭條件。我如何將這個用於我的場景?Clojure多線程輸出流
我試着尋找原子,參考等。我最初認爲將輸出流聲明爲原子會起作用,但我不太確定,因爲它似乎避免了同時更改原子狀態(使用swap!),但我認爲您可以從多個線程取消引用原子,這意味着多個線程將deref保存我的輸出流的原子並同時寫入它。
任何建議將是最有幫助的。
在此先感謝
(defn send-my-data [output data-bytes]
(try
(.write output)
(.flush output)
(catch Exception excp
(println (format "issue %s" (.printStackTrace excp))))
現在我所有的線程調用這個函數任何時候他們想要的數據寫入到輸出流
根據我提供我怎麼能實現你的方法示例代碼。我想我很難理解代理數據類型的概念,因爲我試圖將它與其他基本數據類型進行比較。我不完全確定實際的輸出代理在上面的例子中做了什麼。對不起,如果它有點如果一個新手問題。我真的很想理解clojure併發的力量。 – sqwale
在此示例中,輸出代理程序的內容完全未使用,輸出代理程序正在用作任務隊列,該事務隊列與事務很好地協同工作,並將收集任何異常以供以後檢查。每次發送調用都會將一個函數運行到代理輸入隊列中,然後代理線程池將按照特定代理線程池中線程接收到的順序運行輸入隊列中的函數。如果您發送長時間運行的作業並且或者需要限制並行任務,那麼值得了解send-off和send-via函數。 –