![](/img/trans.png)
[英]Problem that the time interval of vertx.setPeriodic function decreases
[英]what will happen if vertx setPeriodic delay is little than its handler execution time
在使用vertx.setPeriodic
設置計時器的工作vertx.setPeriodic
,延遲是100ms
但處理程序要花費5000ms
100ms
才能完成,如果應用程序長時間運行,會發生什么情況。 會導致內存泄漏問題嗎? 如果可以,如何消除內存問題?
vertx.setPeriodic(100, timer -> {
vertx.executeBlocking(future -> {
// here are some blocking code may cause 5000ms to complete the future.
}, res -> {
});
})
最終是的,它將導致內存問題,因為,
由於periodicB內部的代碼正在executeBlocking
內部執行,因此它將在配置的工作池(具有固定大小)上執行,並且由於未指定order參數,因此每個executeBlocking調用將串行執行(即一個接一個)。
由於periodic在事件循環線程上運行,因此它將永遠不會等待,並且會在經過修復周期(在您的情況下為100 ms)之后繼續觸發。
因此,對周期內代碼的調用將順序執行並堆積起來。 一旦工作池耗盡,對executeBlocking的調用將進入等待狀態。
處理此問題的選擇很少(一種或多種),
false
指定為ordered
的參數。 在這種情況下,可以在工作池上並行執行任何executeBlocking
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.