Всем привет. Сначала я подумал, что лучше всего будет продолжить тему nginx на примере почищенного и закомментированного конфига с одного из продакшн-серверов, но потом понял, что для этого потребуется достаточно большое количество дополнительной информации.
Поэтому я решил попробовать для начала рассказать в общих чертах о том, как работает nginx и почему он работает так быстро.
Начать нужно с понимания того, как сервер с одним обычным процессором может одновременно обрабатывать более одного сетевого запроса.
Всем давно известно о разделении процессорного времени между задачами и переключении задач с помощью таймера в современных операционных системах.
Но если бы у компьютера был только один процессор, он все равно не смог бы выполнять более одного запроса одновременно.
Разделение задач на кванты и их чередование привело бы не к уменьшению, а к увеличению общего времени, затрачиваемого на работу над всеми задачами.
Все дело в том, что современные компьютеры имеют более одного процессора.
:) Даже если у вашего процессора только одно ядро, ему помогает куча других чипов.
Основные из них — это DMA-контроллер(ы), специализированный контроллер на сетевой карте, контроллер жёсткого диска, процессор видеокарты (хотя в веб-серверах он ещё не используется) и так далее, и тому подобное.
Всё эти устройства могут взять на себя множество узкоспециализированной работы, освобождая центральный процессор для выполнения других задач.
Задача операционной системы — разумно распределять нагрузку между устройствами, обнаруженными на вашем компьютере.
Например, процессор может сказать контроллеру DMA «переместить эти данные с диска в эту область памяти» и сделать что-то еще.
Что именно «другое», определяет один из специальных алгоритмов планирования, каждый из которых имеет свои преимущества и недостатки (о них советую прочитать очень хорошую книгу г-на Танненбаума «Современные операционные системы»).
Но это не то, о чем мы сейчас говорим.
Хотелось бы обратить ваше внимание на то, что сама архитектура современных компьютеров x86 предполагает асинхронное выполнение задач для повышения производительности системы в целом.
Операционная система может скрыть эту асинхронность от пользователей, предоставляя синхронные системные вызовы , но можно много выиграть, если написать программу с учетом того, что происходит «под капотом».
Правда, здесь скрыта небольшая проблема.
Операционные системы традиционно проектировались таким образом, что работающие программы могут даже не подозревать, что они не одни.
И даже средства для выполнения быстрых асинхронных системных вызовов появились относительно недавно в Linux, FreeBSD и Windows (я не имею в виду выбор и опрос).
В принципе, я думаю, вы уже поняли, к чему я клоню.
Nginx работает очень быстро, поскольку не порождает отдельный процесс (поток) для каждого обработанного запроса от пользователя, а выполняет все задачи в одном процессе, используя асинхронные системные вызовы для операций ввода-вывода (работа с сетью и жестким диском).
Этот подход имеет ряд преимуществ: — всю работу может выполнять один процесс или вообще N процессов, где N — количество ядер вашего сервера; — количество переключений между контекстами выполнения сведено к минимуму; — практически нет необходимости синхронизировать процессы или потоки; — уменьшено использование памяти; Есть у этого подхода и свои недостатки, основными из которых являются необходимость очень тщательного подхода к серверному программированию и невозможность использования блокирующих операций ввода-вывода.
Точнее, вы, конечно, можете использовать операции блокировки, но это остановит ВЕСЬ процесс веб-сервера, и обслуживание всех соединений, пока блокировка не будет завершена.
В частности, это одна из проблем использования встроенного Perl в nginx. Во время любой операции ввода-вывода он может быть заблокирован — и это замедляет всю работу.
В заключение хотелось бы добавить, что производительность вашего сервера с nginx во многом зависит от операционной системы и ее настроек.
Правильно настроив ОС, при больших нагрузках можно повысить производительность сервера на многие десятки процентов.
PS Спасибо моим друзьям и коллегам за бета-тестирование текста.
:) Теги: #Nginx #операционные системы #о жизни
-
Freebsd: Отчет За Четвертый Квартал 2009 Г.
19 Oct, 24 -
Австралия: Маленькая Реколонизация Земли
19 Oct, 24 -
Выбор Спортивных Наушников До 2500 Рублей.
19 Oct, 24 -
Google Chrome Не Работает С Wm Keeper Light
19 Oct, 24 -
Apple Iphone Стандарт
19 Oct, 24 -
В Японии Родилось Четвертое Поколение Клонов
19 Oct, 24 -
Рекламный Креатив В Туалетах
19 Oct, 24