Timer

1262 ワード

Timerについて、最も核心的なapiはsetTimeoutclearTimeoutです.本文はこの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を呼び出すことを忘れないでください.そうしないと、メモリ漏れが発生します.