java.util.concurrent.ScheduledExecutorService很少运行

时间:2015-10-19 08:08:29

标签: java scheduled-tasks runnable java.util.concurrent scheduledexecutorservice

我有一个客户端应用程序,其中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秒之间。

1 个答案:

答案 0 :(得分:0)

您运行了多少个线程以及您拥有多少个核心?您是否可以为来自不同线程的每个请求提供服务,并且上下文切换会使您的应用程序运行得越来越慢?

注意不要拥有比核心更多的CPU绑定线程。 (只是一个猜测,抱歉,如果它已经离开)

另外,您是否需要核心大小为10的预定线程池执行程序? SingleThreadScheduledExecutor不足以完成计划任务吗?