15.01.2010, 14:19
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Лично мне всегда больше нравился путь PHP, когда скопировал файлы рядом и подключил их, нежели путь того же Python, когда сначала нужно что-то установить.
|
|
15.01.2010, 14:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от Kolyaj
|
Вот только язык не предрасполагает писать в таком стиле.
|
ну, в базовом виде, конечно да.
но, это можно обойти при желании.
в нем есть способы для реализации колбеков, и создания простейшего событийного механизма
я специализируюсь в написании парсеров и граберов на PHP, и мною был сделан несложный модуль(базирующийся на multi-CURL, но легко переделываемый под любую другую асинхронность) из нескольких классов, который позволяет посылать одновременно несколько запросов, и обрабатывать по мере прихода.
кодирование сводится к созданию пары новых классов наследующих базовые: для контроля очереди и количества потоков, и для конкретных запросов(с двумя основными методами-создать запрос, и обработать пришедший)
короче, было бы желание, можно и из веревки застрелится))))
на сим я извиняюсь за офтопик, и ухожу из темы.
если интересна моя тема, то прошу в личку, или новую тему
|
|
15.01.2010, 14:25
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Gvozd
|
на сим я извиняюсь за офтопик, и ухожу из темы.
|
Ну почему же оффтопик, асинхронность по отношению к Node.js как раз не оффтопик
Опять же, в стандартном режиме работы в PHP на каждый запрос новый поток. Поэтому пока, например, асинхронно читается файл с диска, потоку, по большому счету, делать нечего. Node.js же в это время обрабатывает другие запросы.
Последний раз редактировалось Kolyaj, 15.01.2010 в 14:28.
|
|
15.01.2010, 14:25
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от kurokikaze
|
Имхо стандарт должен определять синтаксис и модель языка, а не список доступных модулей. Так что библиотека может быть и внешней - главное чтобы основные модули были доступны сразу с Node, а дополнительные - по требованию.
|
Ну, все built-in модули стандарт описывает (и 3-я и 5-я редакции). Вопрос лишь в том, до какой степени создавать стандартную библиотеку в built-in режиме, а что - оставить для написания 3rd-party разработчикам.
К примеру, Ruby имеет большую стандартную библиотеку (хотя, всё это могло бы быть написано чисто на Руби, а сам Руби был бы небольшим ядром; кстати, где-то недавно видел финальный драфт спецификации по Руби, не знаю, описывались ли там все built-in модули или нет). Python тоже имеет немалую built-in библиотеку и часть py-built-in.
Сообщение от kurokikaze
|
Кстати, работа над package manager для Ноды уже идёт.
|
Угу, спасибо, посмотрю. Это какой-то альтернативный менеджер пакетов (в смысле, есть ли стандартный для Node.js)? Автор - Вы? Если да, развивайте - есть хорошая возможность занять нишу.
Сообщение от kurokikaze
|
А насчёт реализации - там Global interpreter lock, как в Питоне.
|
Угу, т.е., всё-таки, лочится на определённом моменте, а дальше может делаться fork текущего процесса?
|
|
15.01.2010, 14:52
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от Kolyaj
|
не оффтопик
|
ну раз так, то продолжаем обмен мнениями)))
Сообщение от Kolyaj
|
Опять же, в стандартном режиме работы в PHP на каждый запрос новый поток. Поэтому пока, например, асинхронно читается файл с диска, потоку, по большому счету, делать нечего. Node.js же в это время обрабатывает другие запросы.
|
да, PHP этого не умеет.
на каждый запрос всегда создается либо отдельный поток(модуль), либо отдельный процесс(CGI)
fast-CGI (хотя он не совсем в тему к асинхронным возможностям Node.js) в PHP насколько я знаю не реализован и опция такая поставлена "для заглушки"
НО! Пока конкретный экземпляр скрипта простаивает в ожидании данных из файла, остальные потоки/процессы продолжают обрабатывать запросы, что обеспечивается многопоточностью самой ОС/веб-сервера
Использовать же один процесс для обработки нескольких запросов вперемешку(а не последовательно как в fast-CGI), считаю плохой идеей, по-крайней мере если нету эффективного инструмента для отделения глобальных переменных от переменных индивидуальных для каждого запроса.
в любом случае, использование асинхронности в PHP является достаточно нетипичным, и если уж используется, то как правило пока идет чтение файла(ов), можно делать(и нужно) какое-то полезное действие(обработка прочитанных блоков,действия не зависящие от файла)
|
|
15.01.2010, 15:10
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Gvozd
|
fast-CGI (хотя он не совсем в тему к асинхронным возможностям Node.js) в PHP насколько я знаю не реализован и опция такая поставлена "для заглушки"
|
Если так, то совсем всё плохо.
Сообщение от Gvozd
|
НО! Пока конкретный экземпляр скрипта простаивает в ожидании данных из файла, остальные потоки/процессы продолжают обрабатывать запросы, что обеспечивается многопоточностью самой ОС/веб-сервера
|
Так они и при синхронной работе то же самое делают.
Сообщение от Gvozd
|
Использовать же один процесс для обработки нескольких запросов вперемешку(а не последовательно как в fast-CGI), считаю плохой идеей, по-крайней мере если нету эффективного инструмента для отделения глобальных переменных от переменных индивидуальных для каждого запроса.
|
// созданные здесь переменные будут глобальными для всех запросов
http.createServer(function() {
// созданные здесь переменные будут локальными для каждого запроса.
})
А вот обмен данными между запросами в PHP уже можно реализовать только через базу/файлы.
Порог входа, разумеется, получается выше чем у PHP, но зато возможностей гораздо больше.
|
|
15.01.2010, 15:29
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от Kolyaj
|
А вот обмен данными между запросами в PHP уже можно реализовать только через базу/файлы.
|
есть достаточно мало задач, где бы могло понадобится взаимодействие между происходящими в данный момент запросами.
поэтому как правило БД и файлов вполне достаточно
тем не менее, можно использовать для этого механизм семафоров и общей памяти, хотя не разу им не пользовался, и не в курсе, насколько он эффективен
HEAP-таблицы вполне пригодны для обмена переменными
также в случае CGI можно попытаться писать в stdin-поток других экземпляров скриптов, но не уверен
|
|
15.01.2010, 15:39
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
А мне вот интересно. Simon Willison приводит бенчмарк для сервера, отдающего "Hello, World" через 2 секунды
http.createServer(function(req, res) {
setTimeout(function() {
res.sendHeader(200, {'Content-Type': 'text/html'});
res.sendBody('<h1>Hello World</h1>');
res.finish();
}, 2000);
}).listen(8080);
У кого-нибудь есть под рукой инструменты, чтобы проверить PHP в той же ситуации?
<?php
sleep(2);
echo "Hello, World";
|
|
06.02.2010, 14:36
|
Интересующийся
|
|
Регистрация: 18.11.2009
Сообщений: 10
|
|
проверял на mac book pro:
node.js Requests per second: 49.72 [#/sec] (mean)
php Requests per second: 38.97 [#/sec] (mean)
|
|
06.02.2010, 19:15
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
moro,
спасибо, результаты радуют.
Сообщение от moro
|
node.js Requests per second: 49.72 [#/sec] (mean)
|
Близко к результатам Симона и к максимально возможному количеству.
|
|
|
|