gpt4 book ai didi

java.util.concurrent.ScheduledExecutorService 运行频率很低

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:37 24 4
gpt4 key购买 nike

我有一个客户端应用程序,其中可运行对象必须在固定周期内运行。因此,我使用 java.util.concurrent.ScheduledExecutorService 如下:

ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(10);

ScheduledFuture scheduledFuture =
scheduledExecutorService.scheduleAtFixedRate(runnableClass,
period,period,TimeUnit.SECONDS);

只要工作负载较低,任务就会在定义的时间段内调度,即如果客户端没有从服务器接收到消息。但是,如果服务器全速发出消息,则 runnableClass.run() 不会按时执行。我觉得执行之间的时间呈指数增长。但电脑仍然运行流畅。

所有异常都会在run()内捕获,如果我减少从服务器发送的消息,则任务会更频繁地调度。

为什么会发生这种情况?

编辑:该任务需要大量资源,并且它使用 Rserve 来获取在 R 中计算的预测。一项任务中可能最多有 5000 次对 R 的调用。

我对任务的时间做了一些测试。任务总是在一秒内完成,而周期则在 3 到 20 秒之间。

最佳答案

您正在运行多少个线程以及有多少个核心?是否会发生这样的情况:您从不同的线程处理每个请求,并且上下文切换使您的应用程序运行速度越来越慢?

请注意,受 CPU 限制的线程数不要多于内核数。(只是猜测,如有偏差,敬请谅解)

此外,您是否需要一个核心大小为 10 的调度线程池执行器? SingleThreadScheduledExecutor 不足以完成计划任务吗?

关于java.util.concurrent.ScheduledExecutorService 运行频率很低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com