Post
Topic
Board Кодеры
Re: Могопоточное приложение на C++
by
kzv
on 27/01/2020, 17:35:37 UTC
один рабочий процесс nginx обслуживает множество подключений одновременно,
Правильно

а в апаче только одно,
Правильно

и если nginx будет использовать классические потоки (то же самое что threads в винде), с точки зрения производительности не изменится абсолютно ничего

Если нам договориться между собой тут, что потоки и процессы это одно и тоже, то для nginx очевидно ничего не поменяется ни в плане производительности, ни в каком другом плане. С чего бы вдруг?
Что-то поменяется если вы вместо асинхронной однопоточной работы начнете внутри процесса nginx плодить потоки для каждого сокета как это сделано в апаче. Вот тогда и увидите ад как он есть!

Остался еще один шаг: что по вашему делает "мастер процесс"?
Если говорить про сеть, то раньше он висел на приеме входящих соединений, с появлением опции reuseport это тоже переехало в worker-ы, так что теперь мастер просто читает конфиг и управляет worker-ами.
Ну вот мы еще раз убеждаетмся, что "потоки" в nginx это никакие не потоки, а самые настоящие процессы. Каждый "поток" это отдельный самостоятельный экземпляр сервера. Вся "многопоточность" нгинкса заключается в клонировании единственного однопоточного процесса.
То есть если на примере стартового поста темы, то автору многопоточность в стиле nginx можно организовать очень просто: достаточно сказать слушающему сокету "O_REUSEPORT" и запустить несколько экземпляров демона коина.

Можно... Если хотите чтобы все встало колом из-за ваших потоков и опросов
Это с каких пор epoll колом встает из-за его вызова из нескольких потоков? Может тесты какие подтверждающие есть? Smiley Это у kqueue такие проблемы есть и там рекомендуют использовать несколько независимых экземпляров для цикла сообщений, а у epoll и виндового iocp всегда все ок с этим было.
Мы обсуждаем сферического коня какого-то. Давайте ваш многопоточный сервер уже посмотрим.

Но ничто не мешает асинхронному приложению быть многопоточным

Если договориться, что потоки и процессы это одно и тоже, то конечно.