我有一个函数,它需要 2 个函数,一个函数监视某个事件,另一个函数实际执行工作,每个函数都在 future 运行,一旦事件 future 返回失败,调用者线程就会通知 worker future 停止。如果工作线程在接收到事件之前完成调用者线程然后通知观察者停止然后调用者返回。
这工作正常,但问题是执行实际工作的工作函数可能/确实需要检查其他事件,每次我需要注意某个事件时,我都会触发 2 个额外的 future 。问题是,最大 future 运行的数量有限制吗?我有时可能会得到 60 个 future ?线程池会根据需要增长吗?并且由于它们在线程池上运行,因此我假设它们的创建成本不会太高?
最佳答案
这一切都取决于 Executor .假设您创建了一个 Executor
与 Executors.newFixedThreadPool(n)并提交n * 100个任务给它,不会有超过n个线程正在运行 .
如果您使用的是 Clojure 的 future function它会将您的任务提交至 clojure.lang.Agent.soloExecutor . soloExecutor 是用 Executors.newCachedThreadPool(threadFactory) 创建的,因此它将重用线程并尽可能多地运行。
关于concurrency - 太多的 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310171/