Nginx中的worker_aio_requests指令是什么?

假设我使用的是像Ubuntu 14.04这样的现代Linux发行版,并假设我正在使用epoll()系统调用,那么worker_aio_requests是做什么的?

文档说:

如果使用epio连接处理方法使用aio,则此指令将为单个辅助进程设置未完成的asynchronousI / O操作的最大数目。

当我第一次读到的时候,我想这意味着对于一个给定的工作进程,当一个连接到达时,在连接的生命周期中,它检查是否读或写就绪,如果没有,则将其放入事件队列中。 工作进程继续接受连接。 当一个特定连接准备好读取或写入时,内核通知系统调用,工作人员处理数据。 所以这个指令将引用在事件队列中允许的I / O操作的次数。

但我不认为这是这样做的,因为我认为这就是事件模块的worker_connections指令。 所以我很困惑什么worker_aio_requestsworker_connections呢?

想象一下,通过持久的http连接在一个页面上发送数百个图像。 一个客户端连接到该工作者,但它有许多I / O。 如果不阻止这些读取,那么工作人员就不必等待。

关于AIO的IBM developerWorks文章很好地概述了asynchronous与阻塞。

在这种情况下,nginx至less使用两个I / O接口,epoll()接受连接和AIO,如提供文件的东西。 监听许多文件描述符与将大量I / O排队到某些其他文件描述符的实现不同。

读取ngx_epoll_module.c,worker_aio_requests被送到io_setup()系统调用。 这导致广告中设置了许多每个工作者的asynchronous操作。

通常使用libaio来实现这一点,虽然nginx似乎绕过了这一点,并使用系统调用。 接口和其他一些怪癖的差异导致多个configuration指令暴露,所以你可以调整工作者连接和并发I / O。