首先大家来看一段PHP的代码
同样的代码我们在Node.js中如何实现?
上述两端代码不仅仅是语义上的区别,我们可以发现Node.js使用了回调函数。两者最主要的区别就体现在阻塞和非阻塞上。
第一个案例中PHP的代码,sleep(5);阻塞了线程的执行,换句话说当程序进入睡眠的时候就什么都不会做了。
第二个案例中Node.js代码,使用了时间轮询机制,不会阻塞当前的线程,这里的setTimeout是非阻塞的,再换句话说,如果在setTimeout之后再加入一条输出语句,会被立刻执行。
执行结果如下:
Node.js采用事件轮询意味着什么呢?
从本质上说Node会先注册事件,然后会不停的询问该事件是否已经分发。当事件分发是,对应的回调函数就会被触发,然后继续执行下去。如果事件没有被分发,就会继续执行其他代码,不会被阻塞。
所以从以上的分析可以看出,PHP的处理方式是阻塞的,所以是同步的,而Nodejs的处理方式是非阻塞的,所以是异步的。
讲到这相信大家对阻塞IO和非阻塞IO有了一个最基本的了解。
thanks
Jack
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.