首先大家来看一段PHP的代码

同样的代码我们在Node.js中如何实现?

上述两端代码不仅仅是语义上的区别,我们可以发现Node.js使用了回调函数。两者最主要的区别就体现在阻塞和非阻塞上。

第一个案例中PHP的代码,sleep(5);阻塞了线程的执行,换句话说当程序进入睡眠的时候就什么都不会做了。

第二个案例中Node.js代码,使用了时间轮询机制,不会阻塞当前的线程,这里的setTimeout是非阻塞的,再换句话说,如果在setTimeout之后再加入一条输出语句,会被立刻执行。

执行结果如下:

Node.js采用事件轮询意味着什么呢?

从本质上说Node会先注册事件,然后会不停的询问该事件是否已经分发。当事件分发是,对应的回调函数就会被触发,然后继续执行下去。如果事件没有被分发,就会继续执行其他代码,不会被阻塞。

所以从以上的分析可以看出,PHP的处理方式是阻塞的,所以是同步的,而Nodejs的处理方式是非阻塞的,所以是异步的。

讲到这相信大家对阻塞IO和非阻塞IO有了一个最基本的了解。

 

thanks

Jack

 

posted on 2016-10-18 10:15  jack.li  阅读(1374)  评论(0编辑  收藏  举报