语 法:aio on | off | sendfile;
默认值:aio off;
上下文:http, server, location
这个指令出现在版本 0.8.11
在 FreeBSD 和 Linux 操作系统上启用(on)或禁用(off)异步文件 I/O (AIO) 的使用:
location /video/ { aio on; output_buffers 1 64k; }
在 FreeBSD 上,从 FreeBSD 4.3 开始可以使用 AIO。在 FreeBSD 11.0 之前,AIO 可以静态链接到内核中:
options VFS_AIO
又可以作为内核模块动态加载:
kldload aio
在 Linux 上,可以从内核版本 2.6.22 开始使用 AIO。此外,必须启用 directio 指令,否则读取将被阻塞:
location /video/ { aio on; directio 512; output_buffers 1 128k; }
在 Linux 上,directio 指令只能用于读取在 512 字节边界(或 XFS 为 4K)上对齐的块。文件结尾未对齐的以阻塞模式读取。 这同样适用于字节范围请求和非文件开头的 FLV 请求:在文件的开头和结尾读取未对齐的数据将被阻塞。
location /video/ { sendfile on; aio on; directio 8m; }
最后,可以使用多线程(1.7.11)读取和发送文件,而不会阻塞工作进程:
location /video/ { sendfile on; aio threads; }
读取和发送文件操作被转到指定的线程池。如果省略池名称,则使用名称为 “default” 的线程池。线程池名称也可以用变量设置:
aio threads=pool$disk;
默认情况下,多线程处于禁用状态,应使用 --with-threads 配置参数启用。目前,多线程仅与 epoll、kqueue 和 eventport 方法兼容,文件的多线程发送仅在 Linux 上支持。
另请参阅 sendfile 指令。