我有一个客户端应用程序,其中runnable必须在修复期内运行。因此,我使用java.util.concurrent.ScheduledExecutorService
如下:
ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(10);
ScheduledFuture scheduledFuture =
scheduledExecutorService.scheduleAtFixedRate(runnableClass,
period,period,TimeUnit.SECONDS);
只要工作负载很低,就会在定义的时间内安排任务,即客户端没有收到来自服务器的消息。但是如果服务器以全油门方式发送消息,则runnableClass.run()
不会按时执行。我觉得执行之间的时间呈指数级增长。但计算机仍然运行顺畅。
所有Exceptions
都在run()
内捕获,如果我减少从服务器发送的消息,则会更频繁地安排任务。
为什么会这样?
编辑:该任务需要大量资源,并且使用Rserve
来获取R
中计算的预测。在一项任务中,R
最多可能有5000次来电。
我对任务的时间进行了一些测试。任务总是在一秒钟内完成,而时间段在3到20秒之间。
答案 0 :(得分:0)
您运行了多少个线程以及您拥有多少个核心?您是否可以为来自不同线程的每个请求提供服务,并且上下文切换会使您的应用程序运行得越来越慢?
注意不要拥有比核心更多的CPU绑定线程。 (只是一个猜测,抱歉,如果它已经离开)
另外,您是否需要核心大小为10的预定线程池执行程序? SingleThreadScheduledExecutor不足以完成计划任务吗?