Hello!
On Thu, Dec 20, 2012 at 7:57 PM, Simon wrote:
> libeio也需要将libeio接入到ngx-lua的事件循环机制中,而在lua上这个事件循环是不可见的,所以基本不能通过lua-resty库的方式实现。
>
是的,涉及到 ngx_lua 的 I/O 调度器的扩展都是有问题的。目前 ngx_lua 的 I/O
调度器是不可扩展的,用户只能依赖于现有的 cosocket 等 API.
由于 Nginx 核心从 0.8.x 系列开始就已经支持(原生)AIO,所以 ngx_lua 会把 Nginx 的 AIO 接口暴露到
Lua 语言层面上来(可能还会同时暴露 sendfile 的接口)。这对于 FreeBSD 等拥有较完整的 AIO
支持的系统来说很有意义,即使对于 Linux 这样的系统来说,在一些场景下也会很有用(比如 MySQL InnoDB 就支持 Linux
上的 native AIO: http://dev.mysql.com/doc/innodb/1.1/en/innodb-performance-aio-linux.html
)。
Nginx 2.0 计划添加内部线程池机制,届时我们也可以使用 OS 线程来规避阻塞的磁盘 I/O,但随着并发和 OS
线程数的增加,线程之间的 CPU 争用开销也会急剧提高。但这在 Linux 这样不具有完整 AIO 支持的系统来说,还是有意义的。
Best regards,
-agentzh