![](/img/trans.png)
[英]Clojure core.async, any way to control number of threads in that (go…) thread pool?
[英]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.