2016-03-26 2 views
-2

Сервер должен отвечать как можно скорее, разве серверный процесс не всегда запрашивает запросы, если есть запросы? Итак, он хотел бы цикл while. Но почему не потребляется процессор (одноядерный), если нет посещения?Почему сервер HTTP не потребляет много процессора?

+3

Вам необходимо предоставить более подробную информацию о том, какое программное обеспечение сервера и как оно настроено. В общем случае сервер не активно проводит опрос, они сообщают им ОС, когда доступно новое соединение/данные. До тех пор они просто спали. – kicken

+0

@kicken Очень жаль, что я мало знаю о деталях сервера; Я имел в виду общую интуицию. Вы имеете в виду, что это какой-то механизм, такой как аппаратное прерывание? – heLomaN

ответ

3

не серверный процесс всегда опрос?

Не, если это разумная реализация.

Существует множество реализаций HTTP-серверов, а серверы связи в целом и опросы не являются подходящей архитектурой для любого из них.

Например, некоторые серверы полагаются на асинхронные операции ввода-вывода, используя события, обратные вызовы и т. Д. Другие реализации полагаются на блокирующие API-интерфейсы сокетов при работе в многопоточных режимах, а также могут быть и другие архитектуры ...

+0

Для использования API-интерфейсов блокирующих сокетов при блокировке процесс останавливается и не потребляет процессор; Это? – heLomaN

+0

@heLomaN - Правильно. – Amit

+0

Для использования 'асинхронного ввода-вывода' запросы будут запускать некоторые действия для их обработки. Не существует основного цикла, но почему процесс не прекращается? Программное обеспечение с процедурным программированием должно выйти после запуска, даже зарегистрировав некоторые обратные вызовы; то как вызывать, когда он не работает? – heLomaN

0

не является процессом сервера всегда, если есть запросы?

Нет. Это блокирует, либо в accept() вызова или вызова select(). Нет опроса.

+0

FTR, есть другие варианты (вероятно, более вероятно), такие как 'epoll_wait()' - и это, если мы не говорим о Windows. –

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