Timer
1262 ワード
Timerについて、最も核心的なapiは
setTimeout(callback, delay[, arg][, ...])
settimeoutは、libuvのuv_を実装するtimerオブジェクトを作成します.timer_Initは責任を負って、二叉木が存在するかどうかを検査して、もし二叉木が存在しないならば、二叉木を作成して、
settimeoutの実現は一段落した.
私は本当にわざと
setTimeout
とclearTimeout
です.本文はこの2つの関数を展開としてnodeを分析する.jsはどのようにこの2つのapiを実現しますか.API
setTimout
は多くの人がその使い方をよく知っていると信じています.関数の主な機能は、一定秒間隔でコールバック関数を実行することです.しかし、注意しなければならないのは、多くの学生が先端から回ってきたので、nodeでは無視されていることです.jsの中のsettimeoutはパラメータの特性を伝えることができますsetTimeout(callback, delay[, arg][, ...])
setTimeout(function (a, b) {
console.log(a, b); // 1, 2
}, 100, 1, 2);
実装の原理
settimeoutは、libuvのuv_を実装するtimerオブジェクトを作成します.timer_Initは責任を負って、二叉木が存在するかどうかを検査して、もし二叉木が存在しないならば、二叉木を作成して、
uv_timer_start
の方法でタイマーを起動して、jsの編纂したコールバックの方法をuv_timer_start
のコールバックイベントに縛って、もし二叉木がすでに存在するならば、そしてそれを一つの二叉木の中に挿入して、二叉木は、時間間隔によって、小さいから大きいまで並べます.uv_timer_start
が到着すると、作成時に約束されたコールバック関数が実行され、ツリーの中を表示します.次は、最近実行する関数を抽出し、uv_timer_start
の方法を実行し、ある時間が経過した後、コールバック関数を実行し、ツリーが空になるまで上記のプロセスを繰り返して停止します.settimeoutの実現は一段落した.
後記
私は本当にわざと
clearTimeout
というapiを忘れたのではなく、本当に重要だと思っていたので、後記の位置に並べました.前文で言いました.node.js利用uv_timer_Initはtimer構造を作成するので、この構造オブジェクトを解放するためには、clearTimeout
を使用して破棄する必要があります.したがって、setTimeout
を呼び出すと、clearTimeout
を呼び出すことを忘れないでください.そうしないと、メモリ漏れが発生します.