繁体   English   中英

Java计划执行程序服务功能

[英]Java Scheduled Executor Service Capabilities

我正在设计一个服务器,我需要能够安排数千个任务。 任务每5秒执行一次。 scheduledexecutorservice是否能够以高精度处理数千个任务? 我试图在一个线程中进行计时。 但实际任务将在线程池中执行。 谢谢

我不确定它究竟是如何工作的,所以如果有人能澄清它,那也值得赞赏!

ScheduledExecutorService由线程池支持。 粗略地说,您可以使用以下等式计算并发运行任务所需的线程数而没有延迟:

池中的最小线程数等于平均任务运行时间每秒执行的平均任务数

例如,平均而言,你需要花费3秒(平均)来完成2个任务,你需要6个线程。 当然,这假设任务随着时间的推移相当均匀。

您还可以使用Executors.newCachedThreadPool() ,它理论上可以同时运行无限数量的任务。 显然,可用内存和上下文切换次数将大大减少这个数量。

如果您的使用场景是:运行数千个任务,每五秒钟在相同的时间点安排 - JVM和任何其他平台都不会处理这个问题。 即使您有数千个线程 ,您也受到CPU核心数量的限制。 准确性在很大程度上取决于您的任务的性质(CPU密集型?阻塞I / O?)

我建议您阅读调度程序执行程序服务的javadoc。 是否有任何特殊的观点让你怀疑它的工业实力。 您应该使用它并测量您的性能以检查它是否与您的用例相匹配。

此外,除非你有充分的理由,否则你不应该修改库类的实现(在客户端隔离调度和任务执行线程)

但是,如果您的调度标准变得复杂,则应使用像quartz这样的库进行评估 - 超出调度程序执行程序服务提供的基本用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM