日期:2014-05-16  浏览次数:20794 次

理解linux下sendfile()系统调用
服务器响应一个http静态资源请求的步骤如下:
1 把磁盘文件读入内核缓冲区
2 从内核缓冲区读到内存
3 处理(静态资源不需处理)
4 发送到网卡的内核缓冲区(发送缓存)
5 网卡发送数据

数据从第一步中的内核缓冲区到第四步的内核缓冲区白白绕了一个圈,没有任何变化
浪费了时间

而sendfile系统调用就是来解决这个问题的

sendfile省略了上面的 2、3步,磁盘文件被直接发送到了网卡的内存缓冲区
减少了数据复制和内核态切换的开销

apache提供了 sendfile的配置

enableSendFile off