所以我正在使用类似于这样的代码:
public void callSlowService(List<Object> objectsToCallFor) {
objectsToCallFor
.parallelStream()
.forEach(object -> slowService.call(object))
}
slowService.call 大约需要 100-500 毫秒
问题是,我可以并行化我想要的所有内容,但最终我仍然锁定一个线程 500 毫秒,只是等待,而我的 CPU 还可以为其他线程做其他事情。
假设我无法更改其他服务(我不能),我这边是否可以使用其他一些设计,让我的 CPU 在等待 SlowService 响应时可以做其他事情?
最佳答案
你不能。
但是,您可以缓解该问题。使用一个通过 BlockingQueue
馈送的新线程的List<Object> objectsToCallFor
并在结果到达时将结果提供给另一个队列。
您仍将等待所需的时间以获得结果,但至少您的主要处理将同时继续。
关于java - 如果我依赖于缓慢的服务,如何避免花费处理器时间来等待它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42385925/