aio 指令

语 法: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 指令。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号