Node.js被聲明爲異步,事件驅動的非阻塞I/O,但是如何識別腳本是否是異步的?還是非阻塞?Node.js:識別腳本是異步還是非阻塞
回答
有哪些是異步的,其中包括的功能的列表:
process.nextTick(...)
setTimeout(...)
setInterval(...)
從File System模塊:
var fs = require('fs');
fs.rename(...)
fs.stat(...)
fs.readFile(...)
fs.writeFile(...)
fs...
還有更多的fs
,基本上是異步的,它們的同步版本在最後有「Sync」後綴(儘管應該避免使用同步版本)。
還有很多更多的例子。EventEmitters可以被認爲是異步的(例如HTTP servers或streams),儘管在技術上它們不是(它們依賴於異步操作)。
它接受callback
作爲一個參數是異步的(或依賴於異步操作),例如基本上幾乎所有的東西:
process.nextTick(function() { // <--- the callback
console.log('nextTick');
});
console.log('test'); // <--- will fire before the callback, i.e. asynchronouos
請記住,這顯然不是一個規則,顯着的例子:
var arr = [ 1, 2, 3 ];
arr.forEach(function(el) { // <--- the callback
console.log(el);
});
console.log('test'); // <--- will fire after the callback, i.e. synchronous
所以,同步碼是一條代碼,它可以在行和行順序之後觸發行。異步代碼是相反的:行(幾乎)的順序無關緊要。在process.nextTick
的示例中,您可以更改process.nextTick
和console.log('test')
的順序,結果將保持不變。
閱讀the documentation並嘗試記憶所有基本的異步功能。
還有一個建議:最好的學習方法是邊做邊學。 ;-)
閱讀代碼;)當庫是異步的時候,它通常是非常明顯的,因爲它通常有助於延續或消息傳遞樣式代碼。通常情況下,您可以有目的地撥打電話並查看它的反應。或者更好的:分析你的代碼。
我不知道任何工具,它可以回答真或假,以「爲輸入碼異步或同步」 :)的
或者你也可以共享代碼或一些背景:)?
編輯:
能給我阻隔或非異步代碼的例子嗎? - 六氰化物
這個問題有關於這個的討論:When is JavaScript synchronous?
同步代碼將是這樣的:
console.log("first");
console.log("second");
console.log("third");
這三行代碼運行的同步 - 第一,二則第三行。
此代碼相反,異步運行:
function f() {
alert("first");
}
function g() {
alert("second");
}
// defer execution for 1000 ms
setTimeout(f, 1000);
// defer execution for 500 ms
setTimeout(g, 500);
// run immediately
alert("third");
你會看到「第三」 -alert,然後再「第二」,最後「第一」。這是一個非常人爲的例子,但你會看到回調(f和g)以及流程與同步代碼的根本區別。
你可以閱讀同步代碼,大部分情況都會發生,就像你讀取它們一樣,在異步代碼中,事件會觸發或調用回調,執行路徑可能不如同步阻塞代碼那麼明顯。
Node.js是一個異步代碼的例子,其中大多數函數調用爲成功,失敗和其他可能的應用程序提供了一組回調參數。
EDIT2:
此鏈接具有相同的代碼寫入同步/異步式一些JavaScript例子:Asynchronous Code Design with Node.js
- 1. 下面的node.js代碼是阻塞的還是非阻塞的?
- 2. 是renderer.render()阻塞還是非阻塞?
- 3. 是什麼非阻塞和異步的區別調用
- 4. 是C阻塞還是非阻塞的write()函數?
- 5. LinkedTransferQueue是阻塞隊列還是非阻塞隊列?
- 6. NS-3 TCP/UDP套接字是非阻塞還是阻塞?
- 7. 如何檢查I/O操作是阻塞還是非阻塞?
- 8. 異步與非阻塞
- 9. Node.js - 如何阻止異步調用。或者是非阻塞的xmltojs lib
- 10. 阻塞與同步,非阻塞和異步之間有什麼區別?
- 11. 使用非阻塞腳本
- 12. java.io.BufferedReader.readLine()是非阻塞
- 13. node.js與redis:同步還是異步?
- 14. 是否是Task.Delay非阻塞?
- 15. 如何在node.js中創建一個非阻塞異步函數?
- 16. Java NIO非阻塞模式vs node.js異步操作
- 17. 當你給他們打電話時,事件是阻塞還是非阻塞?
- 18. 系統Verilog中的++操作符是阻塞的還是非阻塞的?
- 19. SCTP套接字上的關閉調用是阻塞還是非阻塞?
- 20. C++非阻塞異步計時器
- 21. 異步/非阻塞查詢中的SQLDeveloper
- 22. '異步','非阻塞'和'併發'是否意味着彼此?
- 23. 非阻塞和異步套接字之間的區別是什麼
- 24. Node.js非阻塞性質
- 25. Node.js的非阻塞ClientRequest.write()
- 26. 默認爲Javascript同步(阻止)或異步(非阻塞)
- 27. 是同步還是異步?
- 28. MS Access可以非阻塞,還是這只是一廂情願?
- 29. 是PHP蜱非阻塞
- 30. 非阻塞同步AJAX