Комментарии 7
Сопрограммы в с++20 там task<> и co_await не оно?
На мое удивление информацию про такую реализацию я нашёл с трудом, поэтому решил поделиться с вами.Странно, похоже Вы где-то не там искали. Насколько я представляю, именно так сейчас работает большинство реальных многопоточных серверов (и не только HTTP). Как пример, посмотрите реализацию TCP и HTTP сервера в библиотеке POCO. Да и упомянутый Вами Apache тоже использует thread pool
Статья про worker pool vs fork process была бы актуальна для 2010 года, а в 2021 хотелось бы увидеть вступление о причинах побудивших писать собственный http сервер.
Полезно для начала было бы изучить опыт предшественников. Подход 1 поток на каждого клиента был признан несостоятельным еще в прошлом веке, и сформулирован как C10K problem в 1999 году.
Примерно с 2005 в C++ доступна boost.asio позволяющая писать кросс-платформенные асинхронные многопоточных сетевые приложения, в том числе и http серверы.
После массового перехода на C++11 стали доступны такие библиотеки как boost.beast, restinio. Наверно после принятия сопрограмм в C++20 появятся или уже появились новые версии.
Ngnix, насколько я помню, написан на C, совсем другом языке. На C++ сделан Envoy, если хочется посмотреть на устройство proxy сервера.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Многопоточный HTTP-сервер с ThreadPool’ом и конечным автоматом