Еще один блог :)

Вопросы по Nodejs - Часть 2

Часть 2

  1. Почему N. однопоточна
  2. В действительности ли однопоточна
  3. Поддержка многоядерных систем
  4. Как удается обрабатывать конкурентные запросы
  5. Для чего служит модуль child_process
  6. Что такое функция обратного вызова
  7. Что такое блокирующий код
  8. Как удается избавится от блокировок
  9. Что такое ад обратных вызовов

1. Она спроектирована для асинхронных операций. В задачах, требующих асинхронности, как показывает опыт, лучшие результаты у однопоточных систем

2. Хотя N. и выполняется в одном потоке, но использует неблокирующие вызовы операций ввода-вывода, что позволяет поддерживать обработку многих конкурентных запросов. Другими словами, N не пытается сама обработать запросы параллельно, но весь бекэнд находится большую часть времени в параллельном исполнении.

3. N можно запускать на многоядерной машине, но она будет загружать только одно ядро процессора, так как является однопоточной средой. Однако N. дает значительный прирост производительности при подключении дополнительного железа бекэнда. У Node есть модуль Cluster, который к тому же позволяет запустить множество исполнителей N. , к-е будут слушать один и тот же порт

4. Действительно, это однопоточная система, но она упрощает разработку благодаря асинхронности, отсутствию блокировок (проблема бутылочного горлышка) . Дело в том, что внутри Node запускает множественные потоки POSIX  для асинхронных неблокирующих операций ввода-вывода над файлами, DNS, сетью и т.п. Когда N. получает запрос на ввод-вывод она создает поток, в котором независимо выполняется операция ввода-вывода, и как только она будет завершена, поток помещает результат в очередь событий.  На каждом очередном событии N исполняет цикл событий и если стек исполнения пустой, N. помещает  в стек исполнения результат из очереди.

15. N поддерживает создание дочерных процессов для параллельной обработки, сохраняя  событийно-управляемую модель. Каждый дочерний процесс имеет три стандартных потока child.stdin, child.stdout и child.stderr, которые имеют общий доступ с родительским потоком. N. предоставляет три метода для создания процессов: exec - запуск  команды с буферизацией вывода, spawn - запуск нового процесса с заданной командой и fork - особый случай spawn

17. Функция обратного вызова - это асинхронный эквивалент обычной функции.  Функции обратного вызова получают код ошибки и результат операции и выполняются после того, как операция ввода-вывода завершена.  Все API к N. было написано так, чтобы поддерживать функции обратного вызова.

Рассмотрим пример - когда мы просим прочитать файл, N не делает это сама, а запускает отдельный процесс для получения данных, и сразу переходит к следующей операции, не дожидаясь результата. Но как только результат будет получен, N. передаст управление функции обратного вызова. Т.е. мы не получаем ни блокировки, ни ожидания. Поэтому N способна перемолоть огромное количество запросов в секунду, поскольку никогда не попадает в состояние блокировки либо ожидания. N не ждет возврата данных, для обработки следует использовать всегда ф-и обратного вызова или их эквиваленты.

19 Если приложение приостанавливает выполнения, дожидаясь окончания операции ввода-вывода, то такой вызывающий код называется блокирующим

 20. Адом обратных вызовов называют ситуацию, когда в исходном коде множество вложенных функций обратного вызова. Это делает код нечитаемым и осложняет отладку

Опубликовано в категории Вопросы по NodeJS

×