簡體   English   中英

fetch api 是否發生在主線程之外? 如果發生在主線程上,它是如何不被阻塞的?

[英]Does the fetch api happen outside of the main thread? if happening on the main thread how is it not blocking?

我正在研究異步 js,我知道 promises、setTimeout、setInterval 只是“等待”主線程釋放然后它們執行。 為什么當 fetch 發生時它不會像 setTimeout 中的 while 循環那樣阻塞 ui?

讓我們舉一個餐廳的例子。 服務員是你的主線程,廚房是你的 api。 當您下訂單時,服務員將詳細信息提供給廚房並繼續等待其他桌子(非阻塞)。 當廚房准備好食物時,服務員會收到通知並將食物帶回給您(結果可在回調中獲得)。

當您執行 while 循環時,它類似於在您查看菜單時讓服務員留在您的餐桌旁。 服務員被要求做工作,因此它被阻塞了。

希望這個比喻有效。

當其他系統正在執行工作時 - 在獲取后端 api 正在執行工作的情況下,異步完成時將不會發生阻塞。 該線程將繼續處理下一個排隊的項目。

當主線程正在執行工作時 - 在 while 循環的情況下,它是同步完成的並且將被阻塞。

您可以通過以下方式最好地理解單線程異步 javascript:

異步 I/O 操作是否在主線程上執行很大程度上取決於您的環境。 例如node 使用多個線程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM