java - 如果我依赖于缓慢的服务,如何避免花费处理器时间来等待它?

标签 java multithreading service architecture

所以我正在使用类似于这样的代码:

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/

相关文章:

java - 由于 Java 中的线程,不同机器中的性能/时间问题

java - 就每个线程的开销而言,ExecutorService 是最轻量级的并行执行方法吗?

windows - 没有窗口的 SDL(Windows 服务)

C# FileSystemWatcher 未在服务中正确触发

java - 如何让我的背景随着动画不断闪烁

java - 使用图像作为占位符的 Canvas 绘图

java - 如何使用opencv在代理后面捕获视频

java - 获取表格元素的旧值,如何获取新值?

java - synchronized关键字和ReentrantLock的区别

coldfusion - ColdFusion 中的 SOA 风格架构?