Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Node.js (https://javascript.ru/forum/server/6992-node-js.html)

Hivext Technologies 25.02.2010 23:53

Kolyaj,

Если это будет целесообразно, то можно предоставить возможность асинхронного исполнения скриптов на nodeJS. Всегда хорошо когда есть выбор.

Kolyaj 26.02.2010 08:57

Ну а смысл опять же, если все ваши библиотеки синхронные?

Hivext Technologies 26.02.2010 10:59

Kolyaj,

Как раз библиотеки (веб сервисы) у нас существуют отдельно от всех языков программирования. Потому что одна из целей которая ставилась перед архитектурой - не зависимость веб сервиса от какого то языка программирования (ЯП). В итоге вышло следующее, любой модуль (скрипт, приложение) создаваемый разработчиком в рамках платформы становится доступен из поддерживаемых ЯП, причем модуль можно будет исполнять как синхронно так и асинхронно.

Мы делали для эксперимента асинхронность в java. У нас создавался отдельный поток на обработку веб сервиса и обработку callback функции. При этом можно обращаться к глобальным переменным определенным вне кода исполняемого потока. Поток отрабатывает параллельно при наличии двух и более процессоров.

Вот как это было сделано в java

uploader.Upload(appid, uid, file, new Callback() {
     @Override
      public void fire(Response response) {
            if (response.getResult() == Response.OK) {}
      }
});


Или можно сделать синхронный вызов

Response response = uploader.Upload(appid, uid, file);
if (response.getResult() == Response.OK) {}

Kolyaj 26.02.2010 11:05

Hivext Technologies,
не разговаривайте со мной :) Я не ваша целевая аудитория, поэтому только придираюсь. :)

Hivext Technologies 26.02.2010 11:28

Да, я уже понял что нужно все переводить на другой язык...

Ruslan 25.04.2010 23:26

Асинхронность в Node.js в итоге дает порождение все тех же потоков что и при синхронной обработке параллельных запросов в обычной реализации сервера. никакого волшебства.

Kolyaj 26.04.2010 11:49

Цитата:

Сообщение от Ruslan
Асинхронность в Node.js в итоге дает порождение все тех же потоков

Не тех же, нет проблем с доступом к общим переменным.

kurokikaze 24.05.2010 19:30

Там совсем не "те же" потоки. Именно поэтому Node работает так быстро.

Ruslan 24.05.2010 19:46

если можно детальней на счет потоков, оч. интересно

kurokikaze 24.05.2010 22:29

Цитата:

Сообщение от Ruslan (Сообщение 56377)
если можно детальней на счет потоков, оч. интересно

В "обычной" реализации (полагаю, имеется в виду Апач) при поступлении запроса порождается тред (поток), который этот запрос обрабатывает. ОС быстро-быстро переключается между этими потоками (ну и распределяет их между ядрами процессора), поэтому запросы обрабатываются более-менее одновременно.

А вот в Node всё происходит немного по другому. Там для обработки множества запросов используется всего один тред и Event Loop. В Node есть пул событий, ждущих обработки. Это входящие соединения, ответы от серверов, прочитанные с диска фрагменты файлов и т.п. Обработчики этих событий выполняются по очереди одним потоком сервера (одним контекстом движка V8). При этом не тратится время на переключение туда-сюда между кучей тредов.

Один из главных принципов Node — обработчики должны возвращать управление как можно скорее. Если обработчик события должен например прочитать файл, он не сидит и не ждёт пока с жёсткого диска приедут нужные ему байты (как делал бы тред в PHP). Он начинает чтение файла и оставляет обработчик, который будет иметь дело с данными - и сразу же возвращает управление в event loop.


Часовой пояс GMT +3, время: 05:40.