今天我想和大家分享一下我对于node.js的同步异步的理解.

首先是同步

同步的概念通俗的说就是代码依次往下执行,也就是阻塞式I/O(I/O操作一般是读写文件、输入输出、请求响应等等).我们看看下面的代码:

node.js同步方法

这个会先等待五秒钟然后会打印出xgy和aaa,这个就是同步方法.

那么什么是异步呢??异步,就是非阻塞式

我们都知道,node.js是单线程的脚本语言,单线程存在着一些局限性,可是node.js它是非阻塞式的I/O,为什么能做到这一点呢?因为node.js的I/O请求都是异步的.当我们发出指令的操作后我们的程序可以继续往下执行,等到操作完成后执行回调.这么说是不是有一些不明白??我们看一看代码:

node.js的异步操作

以上代码会先打印出:I am an answer五秒钟后会打印出person is thinking和think 5s...

这就是node.js的异步操作.Node.js事件轮询机制(event loop)

Mixu有一篇关于事件轮询的博文,当中有一句话我觉得很经典,

Everything runs in parallel except your code!

(在Node中)除了代码,一切都是并行的!

虽然node.js是单线程不像Java和.net那种有着多线程高并发的语言那么高大上,不过我觉得单线程、异步非阻赛的I/O模型更加精妙.

不过node.js也是优缺点的,就是它不擅长cpu密集型的操作

cpu密集型操作:主要就是复杂的逻辑计算,例如:

这个会花掉很长时间

为什么node.js不擅长cpu密集型操作呢??

答案很简单,因为node.js是单线程的.

最后欢迎各位大佬评论我的文章,我的文章如有不对的地方欢迎修正~谢谢大家~

相关文章