请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于sendfile原理问题

老师您好,想问两个问题

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

正在回答 回答被采纳积分+3

1回答

Jeson 2020-04-18 20:21:54

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


0 回复 有任何疑惑可以回复我~
  • 提问者 烈焰卡卡 #1
    我理解,nginx用的epoll,那么epoll对文件io是不是没有支持?读文件并不能像socket一样被epoll监听到可读事件吧。
    
    第二个问题,我想问的是,一个文件非常大,这个sendfile是否是阻塞住的?那么nginx作为单线程实现的异步io高并发,阻塞住的话肯定会影响其他请求。非阻塞的话,如果我想编程调用sendfile是否需要多次循环来操作一个文件?
    回复 有任何疑惑可以回复我~ 2020-04-18 20:45:52
  • Jeson 回复 提问者 烈焰卡卡 #2
    请求->事件处理->文件IO,事件处理异步了,当然整体就是异步处理。
    sendfile会不会阻塞,不是十分清楚,这一层可能需要分析它的源码。
    回复 有任何疑惑可以回复我~ 2020-04-19 19:26:34
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信