Node單線程的理解
- Node 是單線程的指的是 JavaScript 的執行是單線程的,但 Javascript 的宿主環境,不管是 Node 仍是瀏覽器都是多線程的
- 在 Node 啓動後,會建立 v8 的實例,這個實例是多線程的(在活動監視器中看到的是多個線程)
-
舉例node的線程node
- 主線程:編譯、執行代碼。
- 編譯/優化線程:在主線程執行的時候,能夠優化代碼。
- 分析器線程:記錄分析代碼運行時間,爲 Crankshaft 優化代碼執行提供依據。
- 垃圾回收的幾個線程
-
問題瀏覽器
- 對 cpu 利用不足
- 某個未捕獲的異常可能會致使整個程序的退出等
-
解決:使node具備多線程的實力多線程
進程process和線程thread的區別
- 進程:是資源(CPU、內存等)分配的基本單位它是程序執行時的一個實例。程序運行時系統就會建立一個進程,併爲它分配資源,而後把該進程放入進程就緒隊列,進程調度器選中它的時候就會爲它分配CPU時間,程序開始真正運行
- 線程:程序執行時的最小單位它是進程的一個執行流,是CPU調度和分派的基本單位一個進程能夠由不少個線程組成,線程間共享進程的全部資源,線程由CPU獨立調度執行,在多CPU環境下就容許多個線程同時運行。一樣多線程也能夠實現併發操做,每一個請求分配一個線程來處理
-
區別/優劣優化
- 進程是資源分配的最小單位,線程是程序執行的最小單位。
- 進程有本身的獨立地址空間,每啓動一個進程,系統就會爲它分配地址空間,創建數據表來維護代碼段、堆棧段和數據段,這種操做很是昂貴。而線程是共享進程中的數據的,使用相同的地址空間,所以CPU切換一個線程的花費遠比進程要小不少,同時建立一個線程的開銷也比進程要小不少。
- 線程之間的通訊更方便,同一進程下的線程共享全局變量、靜態變量等數據,而進程之間的通訊須要以通訊的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。
- 可是多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉並不會對另一個進程形成影響,由於進程有本身獨立的地址空間。
補充理解
計算機的核心是CPU,它承擔了全部的計算任務。它就像一座工廠,時刻在運行操作系統
- 進程:CPU所能處理的單個任務。任一時刻,CPU老是運行一個進程,其餘進程處於非運行狀態(一個車間開工的時候,其餘車間都必須停工。背後的含義就是,單個CPU一次只能運行一個任務)
-
線程:(一個車間裏,能夠有不少工人。他們協同完成一個任務)線程
- 操做系統設計
(1)以多進程形式,容許多個任務同時運行;進程
(2)以多線程形式,容許單個任務分紅不一樣的部分運行;
(3)提供協調機制,一方面防止進程之間和線程之間產生衝突,另外一方面容許進程之間和線程之間共享資源