我正在设计一个服务器,我需要能够安排数以千计的任务。该任务每5秒执行一次。 scheduledexecutorservice能够以高准确度处理数千个任务吗?我试图在一个线程中完成时间安排。但实际任务将在线程池中执行。谢谢Java计划执行器服务功能
我不确定它是如何工作的,所以如果有人可以澄清,以及它将不胜感激!
我正在设计一个服务器,我需要能够安排数以千计的任务。该任务每5秒执行一次。 scheduledexecutorservice能够以高准确度处理数千个任务吗?我试图在一个线程中完成时间安排。但实际任务将在线程池中执行。谢谢Java计划执行器服务功能
我不确定它是如何工作的,所以如果有人可以澄清,以及它将不胜感激!
我建议你阅读scheduler executor服务的javadocs。有没有特别的观点让你怀疑它是工业实力?您应该使用它并衡量您的性能,以检查它是否与您的用例相匹配。
而且,除非你有你不应该与库类的实现鼓捣强有力的理由(隔离客户端上的调度和任务执行线程)
但是,你应该评估使用库的石英如果您调度准则预计会变得复杂 - 超出了调度程序执行器服务提供的基本用例。
ScheduledExecutorService
由一个线程池支持。粗略地说,你可以计算同时运行任务所需的线程数,而不使用下列公式延迟:
在池中的线程的最小数目等于平均每秒次平均任务运行时
执行的任务
例如,平均起来2个任务需要3秒(平均)完成,您需要6个线程。当然,这假定任务的分配随着时间的推移相当均匀。
您也可以使用Executors.newCachedThreadPool()
,它理论上可以同时运行无数个任务。显然可用的内存和上下文切换的数量将大大减少这个数字。
如果您的使用场景是:运行数千个任务,每五秒在同一时间点执行一次 - 无论是JVM还是任何其他平台都无法处理。即使你有成千上万的线程,你也受到CPU核心数量的限制。准确性高度依赖于你的任务的性质(CPU密集型?阻塞I/O?)
你应该在你写答案时尝试回答这个问题,但是要感谢 – Tukhes