簡體   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