【发布时间】:2020-08-01 13:12:18
【问题描述】:
我正在为我的加密交易机器人编写回测原始数据收集器,但遇到了一个奇怪的优化问题。
我在 Executors.newCachedThreadPool() 中经常有 30 个可运行对象,运行来自 API 的 get 请求。由于 API 的请求限制为每分钟 1200 个,因此我的可运行文件中有这段代码:
while (minuteRequests.get() >= 1170) {
Thread.onSpinWait();
}
是的,minuteRequests 是一个 AtomicInteger,所以我没有遇到任何问题。
一切正常,问题是即使我使用推荐的忙等待 onSpinWait 方法,当启动等待时,我的 CPU 使用率从 24% 左右上升到 100%。作为参考,我在 3900X(24 线程)上运行它。
关于如何更好地处理这种情况的任何建议?
【问题讨论】:
标签: java multithreading performance concurrency wait