http模块中有一个sendfile指令,默认开启的
简单来说就是启用sendfile()系统调用来替换read()和write()调用,减少系统上下文切换从而提高性能,
当 nginx 是静态文件服务器时,能极大提高nginx的性能表现,
而当 nginx 是反向代理服务器时,则没什么用了。下面我们来分析一下这个sendfile的工作原理:
首先我们需要知道sendfile()和read()、write()之间最大的区别就是前者是属于系统调用,而后者是属于函数调用
语法: sendfile on | off; 默认值:
sendfile off; 上下文: http,server,location,if
in location
sendfile值为on,指定使用sendfile系统调用来传输文件。
sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。