簡體   English   中英

nodejs多個定時器和cpu用法

[英]nodejs multiple timers and cpu usage

假設我有1000個並發的socket.io連接。 在斷開連接時,我想給用戶至少30秒重新連接並維護其會話,所以我想添加一個計時器來做到這一點。 考慮到定時器運行30秒並且只執行簡單的數據庫查詢,這會是cpu密集型嗎? 這是btw的后端,所以沒有瀏覽器。

謝謝

考慮到定時器運行30秒並且只執行簡單的數據庫查詢,這會是cpu密集型嗎?

您不希望計時器每30秒運行一次,並且在沒有斷開連接的套接字時運行數據庫查詢。 這有點像“投票”,這很少是最有效的做事方式。

更有意義的是每次斷開插座時設置30秒計時器。 將timerID放在會話對象中。 如果用戶重新連接,則在重新連接時,您將找到該會話並在其中找到timerID。 取消該計時器。 如果用戶未在30秒內重新連接,則計時器將會啟動,您可以清除會話。

定時器本身並不消耗CPU,因此擁有它們並不是什么大不了的事。 node.js計時器系統非常有效。 它會跟蹤下一個計時器何時應該觸發,這是唯一一個技術上處於活動狀態並為系統計時器設置的計時器。 當該計時器觸發時,它會為下一個應該觸發的計時器設置一個系統計時器。 定時器保存在排序數據結構中,以便node.js使用。

所以,這里唯一需要消耗的CPU是用於組織新計時器的非常少量的內務處理,然后是計時器觸發時你要運行的任何代碼。 如果你打算運行該代碼,那只是你現在運行它還是現在運行30秒,那么運行它時你的CPU使用率沒有任何差別。 它會以任何方式消耗相同數量的總CPU。

因此,如果您想在每個插槽斷開連接時設置30秒計時器,那么這是一件非常好的事情,它根本不會對您的CPU使用率造成明顯影響。

這是一篇參考文章,將有助於解釋: Node.js如何在內部管理計時器以及另一個答案: 在性能問題之前有多少並發setTimeout?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM