js爲什麼是單線程

先看一個比喻

進程就是一個公司,每個公司都有自己的資源可以調度;公司之間是相互獨立的;而線程就是公司中的每個員工(你,我,他),多個員工一起合作,完成任務,公司可以有一名員工或多個,員工之間共享公司的空間

什麼是進程?

進程:是cpu分配資源的最小單位;(是能擁有資源和獨立運行的最小單位)

什麼是線程?

線程:是cpu調度的最小單位;(線程是建立在進程的基礎上的一次程序運行單位,一個進程中可以有多個線程)

瀏覽器是多進程的

放在瀏覽器中,每打開一個tab頁面,其實就是新開了一個進程,在這個進程中,還有ui渲染線程,js引擎線程,http請求線程等。 所以,瀏覽器是一個多進程的。

大家都在說js是單線程的,但是爲什麼要設計成單線程?

這主要和js的用途有關,js是作爲瀏覽器的腳本語言,主要是實現用戶與瀏覽器的交互,以及操作dom;這決定了它只能是單線程,否則會帶來很複雜的同步問題。 舉個例子:如果js被設計了多線程,如果有一個線程要修改一個dom元素,另一個線程要刪除這個dom元素,此時瀏覽器就會一臉茫然,不知所措。所以,爲了避免複雜性,從一誕生,JavaScript就是單線程,這已經成了這門語言的核心特徵,將來也不會改變

爲了利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個線程,但是子線程完全受主線程控制,且不得操作DOM。所以,這個新標準並沒有改變JavaScript單線程的本質。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章