js單線程

相信你們常常會聽到 JS 是單線程執行的,可是你是否疑惑過什麼是線程?瀏覽器

講到線程,那麼確定也得說一下進程。本質上來講,兩個名詞都是 CPU 工做時間片的一個描述。安全

進程描述了 CPU 在運行指令及加載和保存上下文所需的時間,放在應用上來講就表明了一個程序。線程是進程中的更小單位,描述了執行一段指令所需的時間。線程

把這些概念拿到瀏覽器中來講,當你打開一個 Tab 頁時,其實就是建立了一個進程,一個進程中能夠有多個線程,好比渲染線程、JS 引擎線程、HTTP 請求線程等等。當你發起一個請求時,其實就是建立了一個線程,當請求結束後,該線程可能就會被銷燬。進程

上文說到了 JS 引擎線程和渲染線程,你們應該都知道,在 JS 運行的時候可能會阻止 UI 渲染,這說明了兩個線程是互斥的。這其中的緣由是由於 JS 能夠修改 DOM,若是在 JS 執行的時候 UI 線程還在工做,就可能致使不能安全的渲染 UI。這其實也是一個單線程的好處,得益於 JS 是單線程運行的,能夠達到節省內存,節約上下文切換時間,沒有鎖的問題的好處。固然前面兩點在服務端中更容易體現,對於鎖的問題,形象的來講就是當我讀取一個數字 15 的時候,同時有兩個操做對數字進行了加減,這時候結果就出現了錯誤。解決這個問題也不難,只須要在讀取的時候加鎖,直到讀取完畢以前都不能進行寫入操做。內存

相關文章
相關標籤/搜索