日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux 定时器_定时器: Nodejs 中的 timers

發布時間:2023/12/19 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 定时器_定时器: Nodejs 中的 timers 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在看 Node http 模塊文檔的時候, 才留意到?server.timeout?這個屬性, 本想簡單介紹一下, 但是在梳理過后發現關于?timeout?有龐大的內容支撐:?server.timout -> node core timers -> uv timers -> linux msleep/hrtimer -> clocksource -> tsc -> cmos rtc -> clock cycle, 所以拆分成幾部分大致做下介紹, 期望定時器系列結束之后, noder 能夠大致明白:?clock cycle?是如何驅動 linux 的?msleep/hrtimer;linux 的 timers 與 uv timers 的關系;node timers 與 uv timers的關系。

前面敘述了計算機中timer實現原理,libuv層如何借助epoll_wait實現timer的機制,現在講下Nodejs應用層相關的timers。

數據結構與調用關系

從上至下各層的數據結構有:

  • Nodejs - 鏈表,最小堆(實現的優先隊列)
  • Libuv - 最小堆
  • Linux - 分桶-鏈表,紅黑樹
  • 考慮一下場景,三者之間的數據模型是怎樣的

    setTimout(fn1(){},?1000);
    setTimout(fn2(){},?1000);
    setTimout(fn3(){},?2000);
    setTimout(fn4(){},?2000);
    setTimout(fn5(){},?3000);
    setTimout(fn6(){},?3000);
    一圖勝千言(點擊放大)

    關鍵函數:

  • scheduleTimer- node 調用此函數構建了libuv的數據
  • processTimers?- node 定時器的回調函數,libuv 到時會觸發次回調,由此可見具體的fn[x]并沒有傳遞而libuv,而是在node端執行的
  • epoll_wait - libuv 調用linux系統函數構建了高精度定時器的紅黑樹
  • 關鍵點:

  • 三個層面的數據并不一樣
  • Node端時間+函數,三個時間點,6個函數
  • Libuv端時間,三個時間點
  • Linux端最小時間,一個時間點
  • 調用關系
  • Nodejs 把固定的定時回調函數processTimers傳遞給libuv并通過scheduleTimer調用libuv,等待回調
  • Libuv 讀取最小時間同步阻塞調用Linux的epoll_wait,進程進入可中斷睡眠,等待中斷
  • Linux 高精度定時器設置APIC的cycles,繼續執行其他任務,APIC到時觸發中斷
  • Nodejs 的 timers們

    Nodejs 提供的timers們,除了給用戶使用,其實自身也在大量使用。對于Node來說,timer應該算是一種保護機制,先看下Node自身哪里在用吧。

  • TCP 相關模塊?- http[s],net
  • server.timeout
  • server.keepAliveTimeout
  • child_process 模塊
  • child_process.exec(..., {timeout})
  • dns 模塊
  • Resolver({ timeout })
  • readline 模塊
  • readline.createInterface({..., escapeCodeTimeout})
  • vm 模塊
  • script.runInContext(..., { timeout})
  • 以上模塊或模塊中的方法都是系統資源的重度消耗者,而nodejs 作為server端的編程語言,需要特別留意資源的開銷,所以在有資源開銷地方一般都會Timer守護者,以便及時的釋放資源。

    server.timeout

    本次關于定時器的主題,來自網上關于socket hang up與connect ECONNREFUSED的討論,至此還沒有涉及這方面內容。此內容將會涉及到timer以外的,socket, tcp等層面的內容,該內容相對獨立,所以會作為定時器最后一節,放到下次討論。

    總結

    以上是生活随笔為你收集整理的linux 定时器_定时器: Nodejs 中的 timers的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。