先看一個比喻
進程就是一個公司,每個公司都有自己的資源可以調度;公司之間是相互獨立的;而線程就是公司中的每個員工(你,我,他),多個員工一起合作,完成任務,公司可以有一名員工或多個,員工之間共享公司的空間
什麼是進程?
進程:是cpu分配資源的最小單位;(是能擁有資源和獨立運行的最小單位)
什麼是線程?
線程:是cpu調度的最小單位;(線程是建立在進程的基礎上的一次程序運行單位,一個進程中可以有多個線程)
瀏覽器是多進程的
放在瀏覽器中,每打開一個tab頁面,其實就是新開了一個進程,在這個進程中,還有ui渲染線程,js引擎線程,http請求線程等。 所以,瀏覽器是一個多進程的。
大家都在說js是單線程的,但是爲什麼要設計成單線程?
這主要和js的用途有關,js是作爲瀏覽器的腳本語言,主要是實現用戶與瀏覽器的交互,以及操作dom;這決定了它只能是單線程,否則會帶來很複雜的同步問題。 舉個例子:如果js被設計了多線程,如果有一個線程要修改一個dom元素,另一個線程要刪除這個dom元素,此時瀏覽器就會一臉茫然,不知所措。所以,爲了避免複雜性,從一誕生,JavaScript就是單線程,這已經成了這門語言的核心特徵,將來也不會改變