我正在設計一個服務器,我需要能夠安排數以千計的任務。該任務每5秒執行一次。 scheduledexecutorservice能夠以高準確度處理數千個任務嗎?我試圖在一個線程中完成時間安排。但實際任務將在線程池中執行。謝謝Java計劃執行器服務功能
我不確定它是如何工作的,所以如果有人可以澄清,以及它將不勝感激!
我正在設計一個服務器,我需要能夠安排數以千計的任務。該任務每5秒執行一次。 scheduledexecutorservice能夠以高準確度處理數千個任務嗎?我試圖在一個線程中完成時間安排。但實際任務將在線程池中執行。謝謝Java計劃執行器服務功能
我不確定它是如何工作的,所以如果有人可以澄清,以及它將不勝感激!
我建議你閱讀scheduler executor服務的javadocs。有沒有特別的觀點讓你懷疑它是工業實力?您應該使用它並衡量您的性能,以檢查它是否與您的用例相匹配。
而且,除非你有你不應該與庫類的實現鼓搗強有力的理由(隔離客戶端上的調度和任務執行線程)
但是,你應該評估使用庫的石英如果您調度準則預計會變得複雜 - 超出了調度程序執行器服務提供的基本用例。
ScheduledExecutorService
由一個線程池支持。粗略地說,你可以計算同時運行任務所需的線程數,而不使用下列公式延遲:
在池中的線程的最小數目等於平均每秒次平均任務運行時
執行的任務
例如,平均起來2個任務需要3秒(平均)完成,您需要6個線程。當然,這假定任務的分配隨着時間的推移相當均勻。
您也可以使用Executors.newCachedThreadPool()
,它理論上可以同時運行無數個任務。顯然可用的內存和上下文切換的數量將大大減少這個數字。
如果您的使用場景是:運行數千個任務,每五秒在同一時間點執行一次 - 無論是JVM還是任何其他平臺都無法處理。即使你有成千上萬的線程,你也受到CPU核心數量的限制。準確性高度依賴於你的任務的性質(CPU密集型?阻塞I/O?)
你應該在你寫答案時嘗試回答這個問題,但是要感謝 – Tukhes