具有單線程、非阻塞IO、事件驅(qū)動等特性。
成都創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元振興做網(wǎng)站,已為上家服務(wù),為振興各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792學(xué)習(xí)的這幾天,感受最深的還是非阻塞IO。由于采用Google V8引擎,node.js可以異步處理數(shù)據(jù),舉個最簡單的例子。
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,程序按行順序執(zhí)行,每行執(zhí)行完再去執(zhí)行下一行。
運行結(jié)果為5,1,2,3,4。運行時間約為8000ms。
node.js采用非阻塞IO,程序按順序執(zhí)行,但并不等待當(dāng)前代碼執(zhí)行完畢,即IO不阻塞。
1 2 3 4 5 6 |
[root@asxzy nodejs]# node test.js
1
3
2
4
5 |
運行結(jié)果為1,3,2,4,5。運行時間約為5000ms
這就是非阻塞IO所帶來的好處,永遠(yuǎn)不會產(chǎn)生死鎖,因為它本身沒有鎖機制。
同時,非阻塞IO也對變成帶來的一些問題:
過程式編程中,有很多情況下是本句代碼要求先前的代碼執(zhí)行完畢,如要調(diào)用之前處理的數(shù)據(jù)結(jié)果、和數(shù)據(jù)庫交互等。
node.js中可以采用回調(diào)方式解決這個問題。
比如
?1 |
setTimeout(function(){console.log('5')},5000); |
在執(zhí)行完5000ms的Timeout之后,調(diào)用function(){console.log(’5′)}
很好理解了吧??!