2016-04-07 5 views
0

は、あなたがあなたのコードが> = 1000ミリ秒で実行されることを知っているメインスレッドをブロックせずに経過時間を記録できるように、setTimeout()はどのように実装されていますか?

setTimeout(function() { 
    console.log('hello') 
}, 1000) 

setTimeoutコールを考えます。

ただし、JavaScriptがシングルスレッドの場合、setTimeoutコールは非ブロック化の経過時間をどのように記録しますか?

私はイベントループの基本を知っていて、そのあとxコールバックがコールバックキューに渡されることを理解しています。しかし、私が理解していないのは、setTimeoutが実行スレッドを遅くすることなく、バックグラウンドで時間を追跡する方法です。

並行して(並列ではなく)実行されていて、何らかの種類のスケジューラを使用しても、同期して実行されている残りのコードのパフォーマンスに悩まないでしょうか?

+1

['イベントループ]](https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop) – Rayon

+0

@RayonDabreこれは役に立ちません。私はすでにこの記事を読んでいますが、setTimeoutが背後でどのように機能するかは説明していません。どのように非ブロッキングタイマーを実装していますか? – m0meni

+1

jsエンジン自体ではなく、node.jsによって実装されています。 –

答えて

0

setTimeoutはnode.jsによって実装されており、javascriptの実際の部分ではありません。これにより、ルールを少しでも破ることができます。 JavaScriptがメインスレッドをブロックせずにコードの実行を遅らせる方法はないので、JSエンジンをラップする環境はsetTimeoutを実装して、その機能を提供します。

+0

それは私が考えたことですが、どこにも書かれていないようです。ありがとうございました!なぜあなたがdownvotedを得たか分からない...誰かがこの質問を好まないように思える:p – m0meni

関連する問題