Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Иногда встречаются вопросы, почему приходится писать «спагетти-код» на Node.js, постоянно вкладывая друг в друга callback'и, когда на PHP все идет четко последовательно? Ведь алгоритм и там и там один и тот же.
Питон также не предназначался для веба никогда.Это замечание справедливо и его можно ещё усилить: а вот JavaScript предназначался для веба изначально.
phpDaemon сырой и без танцев его заведёт только хороший *nix админ. При том,Прибавлю, что в Windows можно начать «установку» Node.js вообще одним движением пальца, жмякнув мышóю по гиперссылкечто Node.js ставится за пару команд.
Самый быстрый в мире веб-сервер nginx.
Лучшее решение, которое позволяет нам полностью загрузить процессор полезной работой это переход к архитектуре, использующей неблокирующие операции.
мало кто задумывается, какое кол-во проблем вытекает из этой пост-CGIной парадигмы.Да нет — на самом деле много кто задумывается, только действуют не многие.
Какой-то бред вы написали. Если VM выполняют одну и туже задачу ...Вы абсолютно не разобрались в материи, и видно что ничего сложнее календаря и простите «helloworld» вы никогда не делали.
Может ли дочерний поток что-то передать родителю?Да. Пример из документации по Node.js:
var cp = require('child_process');
var n = cp.fork(__dirname + '/sub.js');
n.on('message', function(m) {
console.log('PARENT got message:', m);
});
Может ли родитель отслеживать, жив ли дочерний поток?Аналогично, n.on('exit',
file_read(file) {
_file_read_init(file);
while(!_file_read_ready(file))
{
};
return _file_read_data(file);
}
while(read_port(disk) !== DATA_READY);. С точки зрения ОС процессор работает, с точки зрения пользователя — простаивает, не выполняя полезной работы, выполняя пустой цикл до наступления какого-то события 10% процессорного времени. В асинхронных же системах процесс сообщает системе, что ждёт какого-то события, и пока событие не наступит, передавать ему управление смысла нет, он «спит» и ждёт «будильника». Хотя бы в таком примитивном виде как while(read_port(disk) !== DATA_READY) { usleep(1); }На асинхронной модели построен самый быстрый в мире веб-сервер nginx.отстал от жизни — уже не самый. Но Сысоев, несомненно, внес большой вклад в развитие рунета.
При отправке запросов к БД поток начинает ожидать ответа. Пока данные не вернутся — поток никакой работы выполнять не будет. Это 2мс простоя на запрос в 4мс! Да, мы не можем сделать рендеринг страницы, не получив данные из базы. Мы обязаны ждать. Но ведь при этом мы получаем 50% простоя процессора!
Приктика -критерий истины
это определяют тесты
есть и еще малые быстрые сервера
наш рунет немного зациклился на nginx
location / {
return 200 "Hello world";
}
ab — кстати, слишком медленная и криво-написанная утилита. Её не имеет смысл использовать для тестирования nginx-а. Я, например, наблюдал ситуации, когда с точки зрения ab rps падал при выключении access-логов. Происходила забавная штука, nginx обрабатывал запрос так быстро, что успевал уйти в epool и отдохнуть там до того, как ab присылала новый. Цифры ab часто зависят от того, насколько её паттерн работы накладывается на паттерн работы веб-сервера. Это, впрочем, верно для любого синтетического бенчмарка.Каждый скрипт работает в своем потоке. Один поток обрабатывает один запрос. Потоков у нас достаточно большое количество, медленные запросы забирают поток надолго, быстрые — обрабатываются почти мгновенно, освобождая поток для другой работы.Автор явно путает понятие потока и процесса. В случае с РНР, есть разные варианты обработки. Либо это Апач, который запускает n-е worker процессов. Либо это nginx с проксированием FastCGI на кучу запущенных процессов php-fpm, либо это лайти, c проксированием на запущенных spawn php-fcgi
require_once 'superframework.php'; $app = new App(); $app->mainLoop(), то чтобы она отработала при старте сервера, а не при каждом запросе. А APC и прочие кэшеры на интерпретацию никак не влияет, они кэшируют результаты компиляции исходников в байт-код, но не интерпретацию этого байт-кода.Вы спутали понятия интерпретация и компиляция, если упрощенно, то:
Это просто богоподная статья, которая просто идеально описала все на примере двух языков. Респект! Ресссспектттт!!!
Различия асинхронной и многопоточной архитектуры на примере Node.js и PHP