[英]Creating an asychroneous api for nodeJS (or browser)
大多數 NodeJS 程序員都知道為什么阻塞 NodeJS 的單線程事件循環是不好的。 例如,在讀取文件時,我們知道最好使用 fs.readFile 而不是 fs.readFileSync。 我的問題是:如果 API 執行的底層任務本質上是同步的,那么首先如何創建異步 API? 換句話說,我如何去創建一個 API,比如 fs.readFileSync,而不是使用事件循環線程來執行底層任務? 我是否必須離開 NodeJS 和 Javascript 才能做到這一點?
如果 API 執行的底層任務本質上是同步的,那么首先如何創建異步 API?
在 node.js 中,創建自己的異步操作有以下選擇:
fs.readFile()
)。 如果你的主操作本身是同步的,只能在 node.js 中同步完成,那么這個選項顯然不能解決你的問題。setTimeout()
、 setImmediate()
或nextTick()
將您的代碼分成小塊,以便其他事物可以與您的操作交錯,並且您不會阻止其他事物共享 CPU。 這不會阻止 CPU 使用,但它允許與其他操作共享 CPU。 這是一個以塊為單位迭代數組的示例,該示例不會阻止其他操作共享 CPU: Best way to iterate over an array without blocks UI 。我是否必須離開 NodeJS 和 Javascript 才能做到這一點?
上面的第 #1、#2、#3 項都可以通過 Javascript 完成。 第 4 項涉及創建本機代碼插件(您可以在其中訪問本機線程)。
換句話說,我如何去創建一個 API,比如 fs.readFileSync
要真正從頭開始創建像fs.readFileSync()
這樣的 API,您必須使用選項 #3(同步執行,但在另一個進程中,然后異步返回結果)或選項 #4(訪問 OS 服務)低於通過本機代碼插件內置到 node.js 中的級別)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.