js爲何是單線程

先看一個比喻

進程就是一個公司,每一個公司都有本身的資源能夠調度;公司之間是相互獨立的;而線程就是公司中的每一個員工(你,我,他),多個員工一塊兒合做,完成任務,公司能夠有一名員工或多個,員工之間共享公司的空間瀏覽器

什麼是進程?

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

什麼是線程?

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

瀏覽器是多進程的

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

你們都在說js是單線程的,可是爲何要設計成單線程?

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

爲了利用多核CPU的計算能力,HTML5提出Web Worker標準,容許JavaScript腳本建立多個線程,可是子線程徹底受主線程控制,且不得操做DOM。因此,這個新標準並無改變JavaScript單線程的本質。

相關文章
相關標籤/搜索