Post
Topic
Board Кодеры
Re: Могопоточное приложение на C++
by
kzv
on 25/01/2020, 11:33:18 UTC

Не совсем так, внутри libevent использует epoll на Linux и kqueue на MacOS X/FreeBSD, отличия от select есть, и довольно заметные.
При использовании select или poll на вход этой функции передается список файловых дескрипторов, после того, как функция возвращает управление, вызывающий обязан в цикле перебрать все эти дескрипторы и проверить их состояние.

На винде нет ни poll ни тем более epoll. Последний и не на всех линуксах есть. Так что libevent использует то, что есть в системе: select в винде, а в других - по обстоятельствам...

Nginx использует фиксированное количество потоков (но никак не один, если это специально не указать в конфиге)

Попробуйте ответить на следующий вопрос: если нгинкс может использовать для работы всего один поток, то как он это делает?
Когда поймете ответ, тогда подумайте над следующим вопросом: что делают дополнительные потоки нгинкса?

А если делать по уму, и синхронизировать только передачу данных между потоками, то приложение будет масштабироваться.

Масштабироваться будет, но скорости это не прибавит, а скорее наоборот... Вот такая загогулина ))

Если есть высокие требования к производительности, то можно внедрить lock-free контейнеры...

И мы вернемся к асинхронному однопоточному приложению ))