<div dir="ltr">Благодарю.<br></div><div class="gmail_extra"><br><div class="gmail_quote">10 июня 2016 г., 20:11 пользователь Валентин Бартенев <span dir="ltr"><<a href="mailto:vbart@nginx.com" target="_blank">vbart@nginx.com</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Friday 10 June 2016 18:52:35 Sargas wrote:<br>
> Валентин, а скажите, пожалуйста почему будет много лишних вызовов accept()<br>
> с EAGAIN если соединений мало?<br>
<br>
</span>Потому что в этом режиме, как я уже писал, nginx в цикле зовет accept() до<br>
<span class="">тех пор, пока не получит EAGAIN.<br>
<br>
</span>Таким образом на каждое событие на listen-сокете мы имеем минимум один вызов<br>
accept() с EAGAIN.<br>
<br>
Если рабочему процессу удастся принять 5 соединений, то это будет 5 успешных<br>
accept()-ов и один неуспешный, а если всего одно, то пропорция 1 к 1.<br>
<span class=""><br>
<br>
> Это будет только на Linux или на FreeBSD так же?<br>
<br>
</span>На FreeBSD директива ни на что не влияет.  Там kqueue сообщает о количестве<br>
пришедших соединений в событии и ровно столько раз nginx позовет accept().<br>
<span class=""><br>
<br>
><br>
> На FreeBSD есть accept filter, соответственно если он включен в системе и в<br>
> конфиге nginx, то система знает сколько соединений прошли фильтр и готовы<br>
> для accept. Правильно ли я понимаю что рабочему процессу остается<br>
> обработать известное кол-во соединений и не делать много лишних accept c<br>
> EAGAIN  в этом случае?<br>
<br>
</span>Accept filter тут не причем.  Как я уже описал выше, kqueue сам по себе сообщает<br>
сколько соединений пришло в сокет (независимо от того, используется ли accept<br>
filter или нет), в то время, как epoll сообщает только о факте наличия новых<br>
соединений, но не их количество.<br>
<br>
Про accept filter Игорь писал очень давно:<br>
<a href="http://sysoev.ru/freebsd/accept-filters.html" rel="noreferrer" target="_blank">http://sysoev.ru/freebsd/accept-filters.html</a><br>
<br>
В Linux аналогичной цели (уменьшение числа переключений контекста) может служить<br>
опция TCP_DEFER_ACCEPT.<br>
<br>
--<br>
Валентин Бартенев<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></div></div></blockquote></div><br></div>