今天我想和大家分享一下我對於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是單線程的.

最後歡迎各位大佬評論我的文章,我的文章如有不對的地方歡迎修正~謝謝大家~

相關文章