暂时还有很多细节不理解。
同步,synchronous,chron是时间的意思,如果理解为同时显然很不合理,是不是理解为同一个时间轴更为准确
异步,asynchronous,不同的时间轴,也就类似是平行时空的意思
异步导致了程序拥有多个时间轴
阻塞,是指两行代码(不太准确)在同一个时间轴上,由于前面的代码停滞(不使用CPU),导致后面的代码得不到执行或者导致整个程序停滞,这种现象称阻塞
现在理解ngx_lua的同步非阻塞
lua执行io操作时会阻塞lua业务代码(某次请求)的执行,但是不会阻塞nginx的。这样看来,lua的业务是同步阻塞的。非阻塞是指lua不会导致nginx阻塞。这样理解是不是更准确
实现非阻塞的主要方法是异步执行?
异步阻塞,则是指在拥有多个时间轴程序的某个时间轴内的阻塞。
nginx(不是ngx_lua)的非阻塞是通过异步实现的吗?
AIO和非阻塞IO什么区别?非阻塞IO除了异步方式实现还有其他什么方式?
------------------------------------
Just to try
---------- Forwarded message ----------
From:
agentzh <age...@gmail.com>Date: 2012/12/5
Subject: Re: [openresty] ngx_lua 怎么样才能不阻塞?
To:
openresty@googlegroups.comHello!
2012/12/4 Moven:
> var fs = require('fs'); // Import the 'fs' module
>
> // Read the file asynchronously
> fs.readFile(__dirname + '/example.file.async', 'utf8', function (err, data)
> {
> //这是异步io? 也叫非阻塞io? 用来避免console.log('continue')的阻塞,所以叫做异步非阻塞
我不清楚最新的 NodeJS 中是如何在 Linux 上实现它的 fs 模块的,但从这里的讨论看,fs 模块使用的是阻塞 I/O,并没有使用
AIO,它只不过是通过其内部 OS 线程池做到了“异步操作”:
https://groups.google.com/d/topic/nodejs-dev/LcnXy3NssuY/discussion
一般的文件读写操作并不支持非阻塞 I/O 模式,通常是通过操作系统提供的 AIO (Asynchronous IO)机制来实现的。
是否使用了非阻塞 I/O,是否使用了 AIO,一般只能通过查看应用发起的系统调用(system calls)才能确定;光看用户代码只能区分同步操作和异步操作。