0

以下のjavascriptプログラム(オイラー問題5)では、非同期・ノンブロッキング関数を書く練習をしています。プログラムは、1 ~ 10 の数字で割り切れる最小の数字を見つけようとしています。2520 が最初の最小値であり、プログラムはここで停止する必要があります。

関数が一緒に実行される場合、2 番目の checkNum が最初に実行され、2 番目が最初に出力され、次に最初が出力されるようにプログラムをセットアップしましたが、それは起こっていませんか?

関数を次々に実行するのではなく、同時に実行するにはどうすればよいですか? 私が呼び出す 2 番目の checkNum 関数からのコールバックが最初に呼び出されることを期待しています (答えの近くで開始されるため)、次に最初に呼び出されますが、それは起こりません。本当にありがとう!

var divides = function(a, b) {
  return b % a == 0;
 };

function checkNum(counter, callback) {
   var noRemainder = 0;
   var forward = true;
    while (forward)
    {
    for (var i = 1; i <= 10; i++) {
         if (divides(i, counter))
          { noRemainder++; }
     }

    if (noRemainder == 10) {
       console.log(counter);
       forward = false;
       callback(counter);
    } else {
      console.log(noRemainder);
      noRemainder = 0;
      counter++;
      console.log(counter);
    }
  }
}

checkNum(1, function(counter) {
             setTimeout(function(){
                        console.log("The counter is: " + counter)},3000) 
              }
);

checkNum(2500, function(counter) {
               setTimeout(function(){
                          console.log("The counter2 is: " + counter) },3000)       

                }
);
4

3 に答える 3

0

コアごとにノード プロセスを実行できるコアクラスターモジュールを試してみることをお勧めします。単一のコアでも機能する場合がありますが、このアプローチには複数のコアを強くお勧めします。

もう 1 つ確認すべきことは、並列制御フローを備えたasyncモジュールですが、これはシングル スレッドの概念にも当てはまります。

于 2013-10-02T01:06:06.523 に答える
0

複数のスレッドが並行して実行されているかのように、関数を完全に同時に実行することはできません。これは、Javascript がマルチスレッドではなくシングル スレッドであるためです。実際に得られる最高のものは、実際には実際には並列ではない「ちょっとした」並列操作です。

于 2013-10-02T00:49:37.953 に答える