![](/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.