1

Тема: Про nginx

Хаі. Один чювак сказав, що nginx це однопотоковий сервер, хіба це правда? це ж веб сервер, якщо 1000 користувачів будуть запитувати дані з серверу, то як він вчасно це все віддасть використовуючи один потік? це ж якийсь брід!

2

Re: Про nginx

Чувак правий nginx однопоточний.

Подякували: miroslav.chandler, Replace2

3

Re: Про nginx

Singularity написав:

Чувак правий nginx однопоточний.

ну я вже не буду питати як воно там працює, той чювак дописав, що є сокети, котрі не блокуютьс... правда я не розумію, який в них сенс і як вони там працюють.

4

Re: Про nginx

то як він вчасно це все віддасть використовуючи один потік? це ж якийсь брід!

ну я вже не буду питати як воно там працює

правда я не розумію, який в них сенс і як вони там працюють

Так а нащо було питати? Підтвердити факт його однопоточності?

5

Re: Про nginx

Bartash написав:

то як він вчасно це все віддасть використовуючи один потік? це ж якийсь брід!

ну я вже не буду питати як воно там працює

правда я не розумію, який в них сенс і як вони там працюють

Так а нащо було питати? Підтвердити факт його однопоточності?

ну да, насправді я б хотів щоб мені хтось з вас розповів ,як воно працює

6 Востаннє редагувалося Singularity (12.01.2014 18:42:14)

Re: Про nginx

Запис в сокет відбівається без участі процесора, мережевою картою чи хз(я не трушний програміст і не знаю як ам реалізовано).
В випадку синхронного сокета блокується виконання всієї програми.

Тобто прийшов запит - сервер створив новий {потік|процес} в якому читаються данні з сокета. На створені потки потрібно додаткова память і процесор(переключення контексту між потоками теж потрібно виконувати, хоча це задача ОС чи творця бібліотеки багатопоточні яку ти використовуєш).
У випадку якщо я клієнт і у мене повільне з’єднання і я дуже повільно надсилаю данні, то в сервера буде висіти цей процес в памяті. Можна відкрити багато таких з’єднань і покласти сервер. Так apache до неї вразливий і вона називається http://en.wikipedia.org/wiki/Slowloris

В неблокуючих сокетів є перевага можна переглядати їх стан, тобто "Агов. У нас прийшли всі данні(сhunk). Ні ? Тоді я прочитаю пізніше" відкласти його і перейти до обробки наступного.

Тобто у нас є масив  підключень сonnects

while True: 
    for сonnect in сonnects:
        if сonnect.is_done():
            procces(сonnect)
            сonnects.remove(сonnect)
        else:
            pass
Подякували: FakiNyan, koala, Vo_Vik, ping, leofun015