Використання декількох процесорів/CPU-Cores дає серверним додаткам можливість паралельно обробляти кілька клієнтських з'єднань (і запитів) (досягнення більшої продуктивності).
У світі багатоядерних процесорів це питання було предметом широких досліджень.
Існує 3 способи вирішення паралелізму (наприклад, багатоядерні процесори):
-
використовуючи кілька процесів;
-
використовуючи кілька потоків в одному процесі;
-
використовуючи декілька потоків у декількох процесах.
Apache дослідив кілька моделей, і Nginx використовує варіант №1.
Яка модель краще працює, як правило, розглядається як питання впровадження (принаймні під Unix, де процеси дуже легкі, щоб вони могли конкурувати з потоками).
Тепер, повернувшись до питання, мій припущення (на основі тестів для читання опубліковано тут ) буде те, що належна (багатопотокова) архітектура Apache повинна бути кращою, ніж Nginx на багатоядерних процесорах.
Парадоксальним чином це не означає, що Apache працює швидше, ніж Nginx: це просто означає, що на 1, 2, 3, ... 16 ядер, Apache буде набагато краще, ніж Nginx. WHILE Nginx буде обробляти більше клієнтських запитів:
-
Продуктивність повинна бути швидкою (обробка більше запитів у секунду на одноядерному процесорі)
-
Масштабованість - це можливість обробляти більше запитів за секунду, коли кількість процесорних ядер зростає (ідеал для лінійного масштабування: подвоєння запитів за секунду при подвоєнні кількості процесорних ядер).
Масштабування без продуктивності безглуздо, якщо кількість запитів у секунді на сервері, що має масштаб, не поступається швидкості сервера, який не має масштабу (зауважте, що, якщо сервер дійсно добре масштабується, існує така точка, в якій MANY CIRDS повинні зробити його продуктивним краще, ніж сервер, який не має масштабу).
Виконання без масштабування робить сервер нездатним скористатися перевагами багатоядерних процесорів.
Майбутнє, безумовно, буде зроблено з серверних додатків, котрі обидва правильно, щоб забезпечити найкращу продуктивність за всіх умов (всього декілька ядер або багато-багато ядер).