轉:https://www.cnblogs.com/qianqiannian/p/7010909.html
硬知識:計算機的核心是CPU,承擔計算機的所有計算任務; 計算機的管理者是操作系統,負責任務的調度,資源的分配和管理,統領整個計算機硬件;應用程序是具有某種功能的程序,程序運行在操作系統上。
大部分操作系統的任務調度是採用時間片輪轉的搶佔式調度方式
CPU執行效率高,時間片段,在各個任務之間快速切換,給人感覺多個任務同時運行,就是併發
進程:
- 一個具有一定功能的程序在數據集上的一次動態執行的過程
- 操作系統進行資源分配和調度的一個獨立單位
- 應用程序運行的載體
進程一般由程序、數據集合和進程控制塊三部分組成。
- 程序用於描述進程要完成的功能,是控制進程執行的指令集
- 數據集合是程序在執行時所需要的數據和工作區
- 進程控制塊(PCB)包含進程的描述信息和控制信息,是進程存在的唯一標誌,PCB存在則進程存在。
進程的特徵:
動態性、併發性、獨立性、結構性
線程:
- 程序執行中一個單一的順序控制流程
- 程序執行流的最小單位
- 處理器調度和分派的基本單位
一個進程可以有一個或多個線程,各個線程之間共享程序的內存空間(所在進程的內存空間)
一個標準的線程由線程ID,當前指令指針PC,寄存器和堆棧組成
而進程由內存空間(代碼、數據、進程空間、打開的文件)和一個或多個線程組成
區別
1、線程是程序執行的最小單位,而進程是操作系統分配資源的最小單位
2、一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線
3、進程之間相互獨立,而同一進程下的各個線程之間共享程序的內存空間及一些進程及的資源,某進程內的線程在其他進程不可見。
4、調度和切換:線程上下文切換比進程上下文切換要快得多
多個任務之間切換效率要求越來越高,就抽象出線程概念
爲何不使用多進程而是使用多線程?
- 線程廉價
- 線程啓動比較快,退出比較快
- 線程對系統資源衝擊比較小
- 線程彼此分享了大部分核心對象(FileHandle)的擁有權
- 如果使用多重進程,測試困難
Chrome爲什麼從單進程轉成多進程架構?
任何一個線程的問題都可能影響整個進程,以及整個進程的其他線程。
安全問題:多線程大家的代碼都放在一個進程空間,存在漏洞可能,某些網站會利用瀏覽器漏洞窺探隱私,盜取信息
chrome插件多,開發質量參差不齊。不能因爲一個插件問題導致chrome崩潰
搞多進程架構,內存雖然多消耗了一些,但是穩定,不崩潰,而且又有V8的速度加成。
同一個網站,多個tab,也是一個進程。