关于sendfile原理问题

来源:3-2 Nginx作为静态资源web服务_静态资源类型

烈焰卡卡

2020-04-17

老师您好,想问两个问题

  1. https://www.zhihu.com/question/52989189 在这个链接中,大家提到,对磁盘IO的读写是没有非阻塞一说的。那么当nginx中一些比如proxy cache等功能,将一些数据缓存在本地文件时,返回给客户端时是否也用的是sendfile的原理?否则如何通过非阻塞的方式来读取到文件内容然后返回给客户端连接。
  2. 想了解一下sendfile的原理,linux的sendfile是否也是异步的?当一个文件大小超过socket的缓冲区大小时,是需要nginx底层循环调用多次sendfile,还是sendfile一次,循环过程交给内核?如果是这样,那sendfile究竟是阻塞的还是非阻塞的?
写回答

1回答

Jeson

2020-04-18

sendfile的重点并不是异步IO呀?Nginx异步实现体现在epoll的事件流处理模型。sentfile是实现的是,内核态对静态文件的处理,不需要到用户态。


0
2
Jeson
回复
烈焰卡卡
请求->事件处理->文件IO,事件处理异步了,当然整体就是异步处理。 sendfile会不会阻塞,不是十分清楚,这一层可能需要分析它的源码。
2020-04-19
共2条回复

Nginx入门到实践-Nginx中间件应用+搭建Webserver架构

中间件、负载均衡、应用层安全防护、动静分离、Nginx+LUA开发等

4183 学习 · 908 问题

查看课程