簡體   English   中英

我可以在clojure.core.async / go中取消引用期貨/承諾嗎?

[英]Can I deref futures/promises in clojure.core.async/go?

我正在嘗試找到一種無害地觀察許多future的方法。 這樣,我的意思是不阻塞N個線程等待N個future

我看到core.async庫的構建方式是,它不會通過阻塞操作來阻塞線程,而是將其停放並重新使用線程。 是deref的情況,還是僅與<! alts!

future-done? 函數可用於輪詢一系列期貨,以查看哪些期貨可供查看:

main> (future-done? (future 42))
true
main> (future-done? (future (Thread/sleep 1000) 42))
false

然后,您可以創建一個函數來輪詢所有期貨(可能是矢量)以進行操作,然后繼續執行該工作。 這樣一來,而不是在每一個未來的阻塞線程,您阻止任何未來的一個線程,並決定你要多少這樣的工人(一次一個是共同的選擇)

如果您希望它比以前更有效或更具表現力,則可以創建一個狀態機來跟蹤要檢查和處理的期貨,這將使您重新創建自己的版本clojure.core.async/alts! 並可能更好地始終使用core.async。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM