Во-первых, позвольте мне сказать, что если целью является облегченный HTTP-сервер, который обслуживает страницы PHP, это уже сделано. Посмотрите на nginx .
Что касается опыта обучения, вы выбрали что-то действительно сложное.
Многопоточность трудна в лучшие времена. На C / C ++ (что-нибудь с ручным выделением памяти) это на порядок сложнее.
К этому добавлено сетевое общение. Существуют причуды, с которыми приходится сталкиваться, различные версии HTTP (в основном это не проблема), всевозможные заголовки HTTP и т. Д.
Наиболее интуитивное решение этой проблемы - иметь процесс, который прослушивает порт. Когда он получает запрос, он порождает процесс, который может выполнить процесс PHP при необходимости.
Это, однако, не масштабируется. Первая (очевидная) оптимизация заключается в использовании потоков вместо процессов и некоторой формы межпотокового взаимодействия. Хотя это помогает, оно пока только масштабируется.
Пройдите дальше и посмотрите на обработку асинхронных сокетов, которая является довольно низким уровнем.
Все это, однако, довольно большие проекты.
Есть ли какая-то особая причина, по которой вы делаете это в C / C ++? Или по какой-то конкретной причине вы изучаете один или оба этих языка? Эти языки, безусловно, имеют свое место, но они все больше становятся нишевыми языками. Управляемые (сборка мусора) языки / платформы почти полностью освоены. Джоэл утверждает, что сборщик мусора - это единственное огромное увеличение производительности в программировании за последние 20 лет, и я склонен согласиться.