经过两段代码理解阻塞IO和非阻塞IO

首先你们来看一段PHP的代码异步

一样的代码咱们在Node.js中如何实现?函数

上述两端代码不单单是语义上的区别,咱们能够发现Node.js使用了回调函数。二者最主要的区别就体如今阻塞和非阻塞上。线程

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

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

执行结果以下:回调函数

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

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

因此从以上的分析能够看出,PHP的处理方式是阻塞的,因此是同步的,而Nodejs的处理方式是非阻塞的,因此是异步的。程序

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

 

thanks

Jack

相关文章
相关标签/搜索