Рабочие процессы в асинхронных серверах
Смысл есть, т.к. по умолчанию асинхронное приложение работает в одном потоке, т.е. может загрузить не более одного процессорного ядра.
Если одного ядра мало и\или есть риск, что в потоке возникнет долгая операция - увеличивайте количество воркеров.
В Лайти многопоточный режим отлажен менее тщательно, поэтому предупреждают.
В Nginx'e проблем нет, ставьте "auto".
если на низком уровне то все просто. Главный процесс слушает сокет и делает accept. Затем есть 2 варианта: мультиплексировать запросы (из массива выбирать сокеты готовые для чтения через select/epoll и делать recv или accept в зависимости от того что за сокет готов предоставить данные) либо запихнуть обработку сокета в отедельный поток/процесс. Процессы надежнее ибо если он упадет то серверу от этого ничего не сделается.
А далее уже идут оптимизации. Тот же nginx использует мультиплексирование внутри процессов-воркеров. Мультиплексирование позволяет более грамотно подойти к использованию ресурсов внутри одного процесса, а несколько процессов позволяют обрабатывать паралельно больше запросов. В то же время обработка этих запросов никак не затрагивает главный процесс слушающий сокет на предмет новых подключений.
По поводу самих воркеров. Так как форк нового процесса все же операция не такая уж и дешевая, имеет место такая практика как префорк. То есть в памяти уже крутится какое-то число готовых процессов и при появлении запросов на обработку они просто передаются туда. При повышении количества запросов увеличивается количество воркеров, что минимизирует потери от блокировки процессов...
вообще погуглите про проблему 10k, можно нагуглить кучу алгоритмов обработки запросов.
А что касается lighttpd то в документации описаны случаи когда нужно использовать многопроцессорность, и приведены возможные проблемы с модулями. Именно советов "не использовать" там нету.