摘要:為了利用多核的計算能力,提出標準,允許腳本創建多個線程,但是子線程完全受主線程控制,且不得操作。三異步執行機制所有同步任務都在主線程上執行,形成一個執行棧。只要異步任務有了運行結果,就在任務隊列之中放置一個事件。
一、為什么js是單線程
JavaScript語言的一大特點就是單線程,也就是說,同一個時間只能做一件事。那么,為什么JavaScript不能有多個線程呢?這樣能提高效率啊。
JavaScript的單線程,與它的用途有關。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復雜的同步問題。比如,假定JavaScript同時有兩個線程,一個線程在某個DOM節點上添加內容,另一個線程刪除了這個節點,這時瀏覽器應該以哪個線程為準?
所以,為了避免復雜性,從一誕生,JavaScript就是單線程,這已經成了這門語言的核心特征,將來也不會改變。
為了利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個線程,但是子線程完全受主線程控制,且不得操作DOM。所以,這個新標準并沒有改變JavaScript單線程的本質。
二、任務隊列單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。如果前一個任務耗時很長,后一個任務就不得不一直等著。
如果排隊是因為計算量大,CPU忙不過來,倒也算了,但是很多時候CPU是閑著的,因為IO設備(輸入輸出設備)很慢(比如Ajax操作從網絡讀取數據),不得不等著結果出來,再往下執行。
JavaScript語言的設計者意識到,這時主線程完全可以不管IO設備,掛起處于等待中的任務,先運行排在后面的任務。等到IO設備返回了結果,再回過頭,把掛起的任務繼續執行下去。
于是,所有任務可以分成兩種,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行后一個任務;異步任務指的是,不進入主線程、而進入"任務隊列"(task queue)的任務,只有"任務隊列"通知主線程,某個異步任務可以執行了,該任務才會進入主線程執行。
三、異步執行機制1、所有同步任務都在主線程上執行,形成一個執行棧。
2、主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結果,就在"任務隊列"之中放置一個事件。
3、一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務隊列",看看里面有哪些事件。那些對應的異步任務,于是結束等待狀態,進入執行棧,開始執行。
4、主線程不斷重復上面的第三步。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91698.html
摘要:后面也寫了幾種常見的排序算法,并用快排求第大值,另外如果之前版的作者看到的話可以留言,我會標明文章引用。 之前實習筆試的時候刷題一直用的java,也參考某篇文章寫過java版的二叉樹常見算法,因為馬上要轉正面試了,這幾天都在準備面試,就把之前的翻出來用javascript重新寫了一遍,二叉樹基本都是遞歸處理的,也比較簡單,就當做熱身。后面也寫了幾種常見的排序算法,并用快排求第K大值,另...
摘要:而模擬的方法返回的函數用作構造函數時,生成的對象為。同樣,使用運算符時,綁定構造函數和未綁定構造函數并無兩樣。標準的方法創建一個新函數稱為綁定函數,新函數與被調函數綁定函數的目標函數具有相同的函數體在規范中內置的屬性。 這是一道面試題,題目給出了使用bind方法的樣例,要求用javascript實現這個方法,面試官還很善意的提醒我函數柯里化,然而,我還是不會這道題目,所以回來這會《ja...
摘要:連接開啟你的服務首先確保你已安裝了,并且配置了的環境變量。此時再進入文件夾,里面會有許多文件。創建連接新建一個任意目錄最好新建一個文件夾便于管理。連接錯誤安裝依賴包,運行此文件說明已成功連接到數據庫。 連接 開啟你的mongodb服務 首先確保你已安裝了mongodb,并且配置了mongodb的環境變量。在任意目錄(建議在非中文目錄)下新建database文件夾,在此文件夾下新建tes...
Node.js從2009年誕生至今,已經發展了兩年有余,其成長的速度有目共睹。從在github的訪問量超過Rails,到去年底Node.jsS創始人Ryan Dalh加盟Joyent獲得企業資助,再到今年發布Windows移植版本,Node.js的前景獲得了技術社區的肯定。InfoQ一直在關注Node.js的發展,在今年的兩次Qcon大會(北京站和杭州站)都有專門的講座。為了更好地促進Node.j...
閱讀 3493·2021-11-23 10:13
閱讀 863·2021-09-22 16:01
閱讀 909·2021-09-09 09:33
閱讀 630·2021-08-05 09:58
閱讀 1717·2019-08-30 11:14
閱讀 1935·2019-08-30 11:02
閱讀 3265·2019-08-29 16:28
閱讀 1478·2019-08-29 16:09