Недавно я обнаружил 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 быстро при условии, что весь код, который может занимать время, выполняется асинхронно?
Если мне нужно делать тяжелые вычисления в математике, будет ли Node.js хорошим решением или Java-сервер будет лучше? –
@ oliv37 это может быть, если учесть, как работает цикл событий. Для всего, что может привести к блокировке потока, выполнение этого в отдельном потоке не позволит ему повлиять на другие запросы и будет работать нормально. –
thats correct, что обычно происходит, так это то, что когда что-то вроде этого нужно сделать, nodejs будет порождать другой процесс или выполнять программу на C или python и извлекать результат один раз и использовать его без блокировки цикла события –