NodeJS Parallesim Понимание - PullRequest
       7

NodeJS Parallesim Понимание

0 голосов
/ 12 февраля 2012

Рассмотрим следующие примеры: (предположим, экспресс доступен)

Пример 1:

app.get("/a", function(res){
    // Some-Blocking function for 10 seconds
    res.send("done");
});

app.get("/b", function(res){
    res.send("done");
});

В этом примере, если сначала запрашивается / a, то через 1 секунду / b; / b не обрабатывается, пока не завершится / a? Если это одна нить, так и должно быть. Так как же устранить эту проблему?

Пример 2:

app.get("/a", function(res){
    // Some-Library-Database function
    db.find({"user.id" : 5}, function(data){
        res.send(data);
    });
});


app.get("/b", function(res){
    res.send("done");
});

Опять же, / a запрашивается, поэтому он входит в функцию, вызывает db.find, поэтому, когда db.find завершен, обратный вызов выполняет res.send (data) из A. Таким образом, мы можем ответить / b без ожидания / запрос, верно? (Поправьте меня если я не прав)

Итак, как мы можем достичь примера 2 в примере 1? Можем ли мы сделать эту функцию блокировки для запуска асинхронной тоже? Или DB выполняет IO (отправка команд по TCP на сервер и т. Д.) Делает функцию асинхронной? Я имею в виду, единственное, что асинхронно в nodejs, с IO? Если требуются большие вычисления, нужно ли делать запрос ввода-вывода?

Я пытаюсь учиться и строить в соответствии с понятиями. Я прочитал NodeJS - рак пост, чтобы прочитать критику по поводу Нода, не уверен, что он просто троллит или нет.

1 Ответ

1 голос
/ 12 февраля 2012
  1. Поместите "Some-Blocking функцию на 10 секунд" в block.js
  2. вызов child_process.fork в начале вашего основного кода ('app.js')
  3. добавьте обработчик событий 'message' в block.js, поместите туда свой код блокировки
  4. вызовите child как b.send (аргументы), прочитайте ответ в b.on('message', function(reply) {...}});

Таким образом, все, что вы обрабатываете последовательно в вашем обработчике блокировки, позволяет клиентам, не использующим код блокировки, обрабатываться в родительском app.js

редактировать: обновлена ​​ссылка на документацию

...