Игор, может интересно будет, в новом ядре Linux 2.6.16 появились
системные вызовы pselect/ppoll, я не читал для чего это, лишь
увидел краем глаза про обработку событий. Даю линк:
http://lwn.net/Articles/164887/
pselect() и ppoll() позволяют лишь синхронизировать обработку файловых
дескрипторов и сигналов. Масштабируемости они не добавляют. Единственное
место, где их можно использовать в nginx'е - это мастер-процесс, но
там сейчас используется sigsuspend() как общий знаменатель для всех
платформ.
А что скажешь поводу вызова splice как замены sendfile?
Насколько я знаю, splice() ещё не вошёл в ядро. Его, возможно, можно
будет использовать в imap прокси. Замена sendfile()а на splice() для
дисковых операций - шило на мыло.
Да, похоже, не вошло ещё. Кстати, по ссылке в комментариях есть:
Using sendfile() is just a shortcut for read() followed by write()
with the same buffer and length; it avoids copying into and out of
userspace. The difference with splice() is that the reading and
writing will happen automatically as data becomes available, not
requiring userspace to perform additional system calls, need to
determine optimal buffer sizes, etc.
Ещё не понятно, как splice() будет вести себя с неблокирющимися сокетами.
Игорь Сысоев
http://sysoev.ru