中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript單線程的概念是什么

發布時間:2022-02-08 14:56:41 來源:億速云 閱讀:151 作者:iii 欄目:web開發

這篇文章主要介紹“JavaScript單線程的概念是什么”,在日常操作中,相信很多人在JavaScript單線程的概念是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JavaScript單線程的概念是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在JavaScript中,因為主要用途是與用戶互動以及操作DOM,同一時間只能做一件事情,這決定了它只能是單線程,否則會帶來很復雜的同步問題,為了避免復雜性,JavaScript從誕生就是單線程。

本教程操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。

JavaScript為什么是單線程

JavaScript語言的一大特點就是單線程,即同一時間只能做一件事情。

JavaScript的單線程,與它的用途有關。

作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。

這決定了它只能是單線程,否則會帶來很復雜的同步問題。為了利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JS腳本創建多個線程,但是子線程完全受主線程控制,且不得操作DOM。所以,這個新標準并沒有改變JS單線程的本質。

比如,假定JavaScript同時有兩個線程,

一個線程在某個DOM節點上添加內容,

另一個線程刪除了這個節點,

這時瀏覽器應該以哪個線程為準?

所以,為了避免復雜性,從一誕生,JavaScript就是單線程,這已經成了這門語言的核心特征,將來也不會改變。

任務隊列

單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。如果前一個任務耗時很長,后一個任務就不得不一直等著。

如果排隊是因為計算量大,CPU忙不過來,倒也算了,但是很多時候CPU是閑著的,因為IO設備(輸入輸出設備)很慢(比如Ajax操作從網絡讀取數據),不得不等著結果出來,再往下執行。

JavaScript語言的設計者意識到,這時主線程完全可以不管IO設備,掛起處于等待中的任務,先運行排在后面的任務。等到IO設備返回了結果,再回過頭,把掛起的任務繼續執行下去。

于是,所有任務可以分成兩種,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行后一個任務;異步任務指的是,不進入主線程、而進入”任務隊列”(task queue)的任務,只有”任務隊列”通知主線程,某個異步任務可以執行了,該任務才會進入主線程執行。

具體來說,異步執行的運行機制如下。(同步執行也是如此,因為它可以被視為沒有異步任務的異步執行。)

(1)所有同步任務都在主線程上執行,形成一個執行棧(execution context stack)。

(2)主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結果,就在"任務隊列"之中放置一個事件。

(3)一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務隊列",看看里面有哪些事件。那些對應的異步任務,于是結束等待狀態,進入執行棧,開始執行。

(4)主線程不斷重復上面的第三步。

下圖就是主線程和任務隊列的示意圖。

JavaScript單線程的概念是什么

到此,關于“JavaScript單線程的概念是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

SHOW| 佛冈县| 宁晋县| 宣城市| 东至县| 西青区| 八宿县| 南澳县| 桦川县| 修文县| 慈利县| 油尖旺区| 大埔区| 苏尼特右旗| 洛阳市| 吉木萨尔县| 龙门县| 玉龙| 同仁县| 安泽县| 盖州市| 蛟河市| 乾安县| 新巴尔虎左旗| 巩义市| 夏津县| 郓城县| 星子县| 晋城| 榕江县| 象州县| 浙江省| 肇州县| 武胜县| 四平市| 聂荣县| 乌拉特前旗| 秦皇岛市| 德江县| 鄂托克前旗| 潼关县|