Я пытаюсь сделать простой HTTP-сервер с libevent и сумел сделать это на основе примеров документации. Однако без нитей вся цель libevent — мусор. Я не очень разбираюсь с потоками в C ++ 11, но мне хотелось бы знать, как правильно реализовать такой сервер.
Я нашел этот пример онлайн: https://gist.github.com/kzk/665437
Это правильно? Является ли pthreads правильным выбором? Также эта строка очень странная:
for (int i = 0; i < nthreads; i++) {
pthread_join(ths[i], NULL);
}
Что там происходит?
Я пока не могу рекомендовать libevhtp из-за серьезная ошибка, но вы можете посмотреть, как они используют потоки: https://github.com/ellzey/libevhtp/blob/master/examples/thread_design.c
— Они создают отдельные экземпляры libevent, по одному для каждого потока. Тогда весь асинхронный код будет работать без лишних блокировок и т. Д., Если вы будете осторожны в использовании одной и той же базы libevent в потоке. IMO — это лучший подход к освобождению роликов для типичного веб-сервера.
Что касается https://gist.github.com/kzk/665437, Потоки c ++ 11 не должны быть хуже, чем pthreads.
Других решений пока нет …