Вот есть веб-сервер, он что-то слушает. Он должен маскимально быстро обработать поступивший запрос. Ок, предположим, что listener реализован через цикл while true ... Но вот я пишу while true на РУБИ - и процесс начинает жрать весь CPU. Почему же nginx не жрет в idle режиме весь CPU? Как это реализовано?
Ок, допустим, там таймаут - 0.001 секунда, но это же дохуя? Процесс ruby с таким таймаутом уже жрет 2,8% CPU, но это все равно много
>>163441849 Думаю ОП, что сложновато, и к тому же он весьма вероятно сейчас дрочит свое дрисло морковкой, а ты его отвлекаешь. Да, мне кажется это главная причина.
>>163442234 Ребята, давайте вскроем эту тему, стоит интересоваться этой темой. Вы молодые, здоровые, умные. Это то что надо. Это яхты и виллы. Сюда нужно вливаться незамедлительно. Серьезно, любой из вас будет счастлив от такого. Это лучше чем сидеть на жопе и создавать треды про еот. Я вполне понимаю что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь — самое опасное в жизни — прожить ее, не заметив, как она прошла, будучи серой мышью. Остальные просто не будут такими умными чтобы сделать все чисто
>>163440253 (OP) >Но вот я пишу while true на РУБИ - и процесс начинает жрать весь CPU. Любой процесс в while(tru) будет драть CPU. >Почему же nginx не жрет в idle режиме весь CPU? Они читали мануал и книгу по сетям. >Как это реализовано? Довольно просто.
>>163440253 (OP) Ты уверен, что хочешь с нуля писать веб-сервер, не имея представления о работе сети? Есть куча готовых реализаций, они МАКСИМАЛЬНО БЫСТРЫЕ.
>>163444977 Боюсь, на руби/питоне нельзя реализовать работу с сетью на низком уровне, скриптовые языки предоставляют более высокоуровневое апи для сокетов.
Этот >>163445423- петух написал в принципе верно, но без конкретики. А в твоем конкретном случае тебе надо использовать функцию select в либе sockets. Это в питоне так, ну в руби наверняка сделано аналогично. Обработка запросов будет выглядеть примерно так:
Вот есть веб-сервер, он что-то слушает. Он должен маскимально быстро обработать поступивший запрос. Ок, предположим, что listener реализован через цикл while true ...
Но вот я пишу while true на РУБИ - и процесс начинает жрать весь CPU. Почему же nginx не жрет в idle режиме весь CPU? Как это реализовано?
Ок, допустим, там таймаут - 0.001 секунда, но это же дохуя? Процесс ruby с таким таймаутом уже жрет 2,8% CPU, но это все равно много