nodejs setTimeout函數使用


node.js,說簡單點,基於Google V8引擎的,運行在服務器端的JavaScript。

具有單線程、非阻塞IO、事件驅動等特性。

學習的這幾天,感受最深的還是非阻塞IO。由於采用Google V8引擎,node.js可以異步處理數據,舉個最簡單的例子。

 
1
2
3
4
5
6
7
8
setTimeout(function(){console.log('5')},5000);
console.log('1');
function test(){
setTimeout(function(){console.log('2')},1000);
}
test();
console.log('3');
setTimeout(function(){console.log('4')},2000);

如果是阻塞IO,程序按行順序執行,每行執行完再去執行下一行。

運行結果為5,1,2,3,4。運行時間約為8000ms。

node.js采用非阻塞IO,程序按順序執行,但並不等待當前代碼執行完畢,即IO不阻塞。

 
1
2
3
4
5
6
[root@asxzy nodejs]# node test.js
1
3
2
4
5

運行結果為1,3,2,4,5。運行時間約為5000ms

這就是非阻塞IO所帶來的好處,永遠不會產生死鎖,因為它本身沒有鎖機制。

同時,非阻塞IO也對變成帶來的一些問題:

過程式編程中,有很多情況下是本句代碼要求先前的代碼執行完畢,如要調用之前處理的數據結果、和數據庫交互等。

node.js中可以采用回調方式解決這個問題。

比如

?
1
setTimeout(function(){console.log('5')},5000);

在執行完5000ms的Timeout之后,調用function(){console.log(’5′)}

 

很好理解了吧!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM