1

Я прочитал, что у apache есть решение для создания нового потока для нового запроса, но у меня все еще есть некоторые вопросы.Как сервер (например, сеть) управляет несколькими запросами/соединениями?

Как возможно, что один сервер может управлять тысячами (даже соединение milion - зависит от приложения) одновременно?

От этого зависит CPU? ОЗУ? Пропускная способность?

Когда мы говорим «в одно и то же время» (или когда apache создает новый поток), мы имеем в виду, что эти соединения выполняются параллельно/одновременным? или они параллельны?

Или это зависит от самого сервера? например если сервер многоядерный, сервер может выполнять оба, даже параллельно (каждый поток в своем ядре), даже cuncurrent (несколько потоков в одном ядре одновременно).

Если я хочу обрабатывать тысячи соединений одновременно для одного веб-приложения, что мне нужно сделать? Купить больше пропускной способности? Invenst в CPU?

Я новичок в этом и некоторые хорошие объяснения были бы замечательными.

Я спрашиваю здесь, потому что я был так в посоветовали другой общины: https://serverfault.com/questions/807458/how-does-a-server-e-g-web-manage-multiple-request-connections?noredirect=1#comment1025357_807458

+0

Постарайтесь как можно больше сузить свой вопрос. Как бы то ни было, этот вопрос представляется широким для формата SO. –

ответ

2

Есть два способа обработки нескольких соединений на сервере. Прежде всего, вы можете обрабатывать разные соединения в разных потоках. Это легко и просто. И это позволяет вам работать параллельно на нескольких ядрах процессора, поэтому в любом случае вы будете использовать несколько потоков, если хотите скорость.

Следующая вещь, которую вы должны учитывать, заключается в том, что помимо использования потоков ЦП также необходимо выполнить IO: читать данные из базы данных, ждать на мьютексе, отправлять данные клиенту. Когда поток ожидает ввода-вывода, ему не нужен процессор, поэтому может выполняться другой поток. Поэтому полезно использовать больше потоков, чем доступные ядра ЦП. В этом случае потоки будут выполняться одновременно на нескольких ядрах.

Но запуск новой темы для каждого запроса является дорогим. Вы слишком много накладных расходов. Поэтому вместо нереста потоков вы используете threadpool. Когда поток заканчивает выполнение запроса, он берет новый.

Если этого недостаточно, если слишком сложны служебные задачи планирования задач, вы переключаетесь на асинхронные IO и/или сопрограммы. Вы делаете планирование внутри своего приложения, и это позволяет работать еще быстрее.

Это зависит от процессора? ОЗУ? Пропускная способность?

Это зависит от вашей задачи. Вы должны профилировать свой фактический сервер и найти, где это узкое место. В highload нет универсальных решений.

+0

спасибо за разъяснение. Есть ли способ узнать, сколько пользователей я могу обрабатывать на своем сервере одновременно (или одновременно)? Я имею в виду использование обычного ПК ... можно одновременно обслуживать тысячи запросов? Или для этой вещи я должен получить больше CPU/RAM/Bandwidth – user155293

+0

Предположим, я прошу вас сделать какую-то работу для меня. Сможете ли вы закончить это завтра? Будет ли вам больше времени или денег? Ответ на ваш вопрос тот же: это зависит от того, что это за работа. Постскриптум И мы обычно не измеряем производительность при одновременных подключениях. Обычно мы измеряем производительность в запросах в секунду. –

 Смежные вопросы

  • Нет связанных вопросов^_^