2017-03-08 33 views
0

我已經閱讀了許多關於JavaScript單線程,異步性的文章,並且希望一勞永逸地找到可以用來解釋它的現實世界的類比。如何用類比來解釋JavaScript的單線程本質?

我設想JavaScript就像一個自助餐廳。你有一系列的人通過大門進入食堂。與大多數自助餐廳一樣,您有一個托盤系統 - 一個人可以挑選一個托盤,將它放在導軌上,然後訪問每個食品站,直至它們到達。現在,如果您想象每個人都會一個接一個地走上軌道 - 這是JavaScript的單線程本質。然而,因爲JavaScript也可以異步執行,所以我們需要將其應用於類比...

因此,可以說,在這個食品大廳沿着鐵路有5個食品站,我們專注於三個人打到開始的鐵路,人A(同步),人B(異步)和人C(同步)。 A,B和C人員通過食品站1並且仍然以相同的順序到達食品站2。現在,人A沒有問題地經過食品站2,但是,人B想要的東西已經用完,並且廚師正在烹飪。所以,B人(異步)可以在那裏等待,直到用餐準備就緒。同時,C人得到他們的物品並跳過B人.A和C人現在繼續沿着鐵路走,而B人繼續等待他們的膳食準備。最後,B人收集他們的餐點,並按A-C-B的順序到達。

希望這可以說明JavaScript如何使用單線程(導軌)以及在執行結束時返回數據的順序可能會不同,當我們執行異步位代碼時。

這種類比是否表示單線程異步JavaScript的本質?

回答

2

也許你可以解釋它有點像麥當勞在德國使用的系統。如果您的漢堡包不可用,並且需要超過幾秒鐘的時間才能得到它,那麼您將獲得一個號碼並採取您已有的功能。當你的漢堡完成後,有人來到你的漢堡。從某種意義上說,這是一種回調,它可以爲你提供你所需的數據,現在你可以完成你的工作(在漢堡包上吃掉)

+0

只是想了一遍。也許你應該補充一點,服務器必須等到你啃了你的漢堡,然後給他紙包回來,這樣他纔可以繞過去服務下一位客戶^^ –

+0

這與Promises不是很相關嗎? – JoeTidee