4

このコードがあるとしましょう:

function fn(n)
{
  return function()
  {
    for(var k = 0; k <= 1000; ++k) {
      fs.writeSync(process.stdout.fd, n+"\n");
    }
  }
}

setTimeout(fn(1), 100);
setTimeout(fn(2), 100);

と が交換可能に印刷される可能性は1ありますか(例: )?2stdout12121212121...

私はこれをテストしましたが、それらは互換的に表示されませんでし1111111...222222222...111111211111...2222222....

つまり、Node.js にいくつかのコールバックとイベント ハンドラを登録すると、2 つのコールバックを同時に実行できますか?

(これは 2 つのプロセスを起動することで可能になることはわかっていますが、その場合は 2 つstdoutになり、上記のコードは別のファイルに分割されます。)

別の質問: ノードを忘れて一般的に言えば: 単一プロセス上の任意の言語で、2 つの関数をまったく同時に (つまり、上記と同じ方法で) 実行することは可能ですか?

4

2 に答える 2

5

いいえ、すべてのコールバックは独自の「実行フレーム」で実行されます。他の言語では、「並列実行」と、異なるスレッドで操作が発生した場合に発生するロックとしての潜在的な競合が発生する可能性があります。

于 2012-10-16T22:39:46.220 に答える
1

コールバック コードが純粋に同期している限り、2 つの関数を並列に実行することはできません。ネットワーク結果の取得やデータベースへの挿入など、内部で非同期のものを使用し始めてください。並列処理の問題が発生します。

于 2012-10-17T13:57:20.110 に答える