Мне нужно создать специализированный HTTP-сервер, для этого я планирую использовать epoll sycall, но я хочу использовать несколько процессоров/ядер, и я не могу придумать решение для архитектуры. ATM моя идея followng: создайте несколько потоков с собственными дескрипторами epoll, основной поток принимает соединения и распространяет их среди потоков epoll. Но есть ли лучшие решения? Какие книги/статьи/руководства можно прочитать в архитектуре с высокой нагрузкой? Я видел только C10K статьи, но большинство ссылок на примеры мертвы :(и до сих пор нет углубленных книг на эту тему :(C: epoll и многопоточность
Спасибо за ответы
UPD:.. Пожалуйста, более специфические, мне нужны материалы и примеры (nginx не является примером, потому что он слишком сложный и имеет несколько уровней абстракции для поддержки нескольких систем).
Эй, Даниэль, мне было интересно, как это происходит. Я занимаюсь некоторыми исследованиями в этой области, и я считаю, что моя концепция серверов, управляемых событиями, может быть немного слабой прямо сейчас. Насколько мне известно, кажется, что если у нас есть событие, прошедшее назад (скажем, с использованием epoll), каждая функция, которая вызывается, должна быть не блокирующей ... может быть, это мой дизайн, но каждый запрос, который приходит, вызывает обращение к базе данных. если по какой-либо причине этот вызов медленный, все остальные запросы клиента в то же время также страдают из-за ожидания завершения ответа базы данных. Я могу создать нить .. Цель поражения. – Begui
его не на самом деле, его законченный давно, используя libev :) некоторые функции по-прежнему блокируются в моем приложении, просто их блок-время действительно мало. но такие вещи, как запросы к базе данных, операции ввода-вывода (особенно когда они действительно интенсивные) должны быть неблокируемыми. в моем случае я использую mongodb с его асинхронным драйвером, поэтому у меня нет блокировок при использовании db. У меня есть пулы потоков для вещей, которые я не мог сделать асинхронными (т. е. обработка изображений ImageMagick и минимизаторы CSS/JS), но они управляются через очереди и контролируются epoll (реализация собственной очереди). – Daniel