繁体   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