FastNetMon

Friday 17 September 2010

Что есть sendfile() и с чем его едят?

Многие, уверен, часто слышали про такой системный вызов как sendfile() (например, в Nginx), но не многие задумывались, для чего он нужен и почему его часто позиционируют как "оптимизационный" (то есть, позволяющий что-либо убыстрить, ускорить).

Задача sendfaile заключается в том, чтобы скопировать из дескриптора 1 энное число байт в дескриптор 2 (также для копирования можно задать смещение). Почему такой вызов, который легко "эмулируется" последовательным read с первого дескриптора и write во второй считается оптимизационным? Да очень просто - при вызове sendfile в отличие от read/write отсутствует пересылка данных из ядра в пространство пользователя и обратно (все копирование происходит сугубо в пространстве ядра), этим и достигается экономия ресурсов.

Источник большей части вдохновения - комменты к статей на Хабре: http://habrahabr.ru/blogs/nginx/68480/

No comments :

Post a Comment

Note: only a member of this blog may post a comment.