Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中调度任务以防止处理和带宽使用重叠_Java_Scheduled Tasks_Scheduler - Fatal编程技术网

在Java中调度任务以防止处理和带宽使用重叠

在Java中调度任务以防止处理和带宽使用重叠,java,scheduled-tasks,scheduler,Java,Scheduled Tasks,Scheduler,我正在创建一个守护进程,它将运行某些预定的日志任务,但我担心在某些方面会出现瓶颈 实际上,我有一些日志任务,我想每15分钟执行一次,还有一些我只想每30分钟执行一次,等等,直到每个月只需要运行一次的任务。基本上,我在每个时间间隔都有一个检查列表。它们被放入队列并由线程池处理 目前,我认为这些任务正在运行类似这样的东西 15 15, 30 15, 30, 60 15, 30, 60, 120 15, 30, 60, 120, 240... id, P_Key ScheduleName, AnyI

我正在创建一个守护进程,它将运行某些预定的日志任务,但我担心在某些方面会出现瓶颈

实际上,我有一些日志任务,我想每15分钟执行一次,还有一些我只想每30分钟执行一次,等等,直到每个月只需要运行一次的任务。基本上,我在每个时间间隔都有一个检查列表。它们被放入队列并由线程池处理

目前,我认为这些任务正在运行类似这样的东西

15
15, 30
15, 30, 60
15, 30, 60, 120
15, 30, 60, 120, 240...
id, P_Key
ScheduleName, AnyIdentifier for the daemon to run or task to do.
lastRunTime, lastTime it was run.
granularity, 15 mins, 30 mins etc.
这意味着,如果守护进程在00:00时启动,那么到04:00时,将有五个进程同时运行,这并不是它的结束。目前,这导致计划15分钟的下一个任务运行缓慢,并且可以访问有限的带宽

但是,任务不必在小时内运行。因此,如果15分钟的任务在一小时内运行,则30分钟可能在一小时后的5分钟开始,以尽量减少重叠。甚至可以将两个30分钟的任务(例如00:00和00:30)分为四个15分钟的过程,以减少被“一次完成”类型的问题击中,但这确实让我头晕目眩


有什么众所周知的方法来管理这类问题吗?

您一定要看看,尤其是
cron
风格

干杯,

好吧,从长远来看(正如我从你的问题中看到的),你必须寻找类似的东西

除此之外,我还有几个问题和建议:

  • 使用
    [ScheduledExecutorService][2]
    管理这些线程。即使使用
    ScheduledExecutorService
    ,看起来您也希望以单独的时间间隔运行它们,而不考虑它们的执行时间
    SchedulewithFixedRate
    而不是
    ScheduleWithFixedDelay

  • 即使实现了类似的功能,如果线程开始在多个主机上运行,逻辑也会失败。运行每小时线程的2台主机将有效地每30分钟运行一次

  • 我更希望在数据库方面有一个
    集中管理
    ,以跟踪上次运行和所有运行情况。这与执行器服务一起将是可扩展和准确的

  • 假设您有1000个计划,在数据库中创建1000行

    列将有点像这样

    15
    15, 30
    15, 30, 60
    15, 30, 60, 120
    15, 30, 60, 120, 240...
    
    id, P_Key
    ScheduleName, AnyIdentifier for the daemon to run or task to do.
    lastRunTime, lastTime it was run.
    granularity, 15 mins, 30 mins etc.
    

    您可以将
    CreationTime
    ModificationTime
    作为最佳实践。

    使用具有多个线程的ScheduledExecutorService?确切时间有多重要,任务将被执行?您可以使用优先级和每项任务“最多迟到xxx分钟”手工制定一些决策逻辑,并尝试一次安排更少的任务。e、 g.仅使用2个线程,但最多使用4个线程来安排优先级较高的任务…实际执行时间有些重要,因为我希望保持执行之间的时间相当稳定,例如,15分钟的间隔尽可能接近15分钟。我想我真正的问题是弄清楚这背后的时间逻辑。我希望它是灵活的,因为我不知道在每个时间范围内需要多少支票。所以,是的,我可以手工制作它,这将是伟大的,我正在寻找的是某种方法,以帮助这个调度过程。