0

以下のコードに問題があります。

var async = require("async");

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
            break;
        }
    }
}

function hello(no){
    console.log(no);
    async.forEach(no,function print_list(x, callback){
        console.log("I am task number : ", x);
        var sleep_time = Math.floor((Math.random()*10)+1);
        console.log(sleep_time);
        sleep(sleep_time*1000);
    },function(err){if (err){console.log(err);}});
}

list = [];
for (var a = 1000; a > 0;a--){
    list.push(a);
};
hello(list);

私の考えでは、この各コードが互いにブロックしないことを期待していますが、それでも同期コードとして扱われることがわかりました。

どこで間違ったのですか?

4

1 に答える 1

5

Node.js はシングル スレッドであり、スリープ機能が CPU を占有しています。

代わりに setTimeout を使用して、これがどのように機能するかについてのより現実的な例を試してください。

function hello(no){
    console.log(no);
    async.forEach(no,function print_list(x, callback){
        console.log("I am task number : ", x);
        var sleep_time = Math.floor((Math.random()*10)+1);
        console.log(sleep_time);
        // use setTimeout
        setTimeout( function() {}, sleep_time*1000);
    },function(err){if (err){console.log(err);}});
}
于 2012-12-20T16:17:32.510 に答える