2015-11-20 3 views
-1

Недавно я обнаружил Node js, и я читал в разных статьях, что Node js быстрый и может обрабатывать больше запросов, чем сервер Java, хотя Node js использует один поток.понимание производительности узла js

Я понял, что Node основан на цикле событий, каждый вызов удаленного api или базы данных выполняется с помощью асинхронного вызова, поэтому основной поток никогда не блокируется, и сервер может продолжать обрабатывать другие клиентские запросы.

Если я правильно понял, каждая часть кода, которая может занимать время, должна обрабатываться асинхронным вызовом, иначе сервер будет заблокирован и он не сможет обрабатывать другие запросы?

var server = http.createServer(function (request, response) { 
    //CALL A METHOD WHICH CAN TAKE LONG TIME TO EXECUTE 
    slowSyncMethod(); 
    //THE SERVER WILL STILL BE ABLE TO HANDLER OTHERS REQUESTS ?? 
    response.writeHead(200, {"Content-Type":"text/plain"}); 
    response.end(""); 
}); 

Так что, если я правильно понимаю, приведенный выше код плохо, потому что синхронный вызов медленного метода будет блокировать Узел основного потока расслоения плотного? Является ли Node js быстро при условии, что весь код, который может занимать время, выполняется асинхронно?

ответ

1

NodeJs так же быстро, как ваше оборудование (vm) и v8, который его запускает. при этом любая сложная задача, такая как обработка файлов любого типа (музыка, изображение, видео и т. д.), окончательно заблокирует ваше приложение. так и вычисление на больших коллекциях, поэтому асинхронная модель используется за счет событий и отложенных вызовов. что, как говорится, ничего не останавливает вас от нереста дочерних процессов, чтобы отменить тяжелую работу и асинхронно вернуть результат. Но если вы находите свое «я» в необходимости делать это для многих задач, возможно, вам стоит пересмотреть свою архитектуру. Я надеюсь, что это поможет

+0

Если мне нужно делать тяжелые вычисления в математике, будет ли Node.js хорошим решением или Java-сервер будет лучше? –

+0

@ oliv37 это может быть, если учесть, как работает цикл событий. Для всего, что может привести к блокировке потока, выполнение этого в отдельном потоке не позволит ему повлиять на другие запросы и будет работать нормально. –

+0

thats correct, что обычно происходит, так это то, что когда что-то вроде этого нужно сделать, nodejs будет порождать другой процесс или выполнять программу на C или python и извлекать результат один раз и использовать его без блокировки цикла события –

Смежные вопросы