1.進程的概念
平時在使用電腦的過程中,可能會登陸QQ,一邊開着網易雲音樂,一邊開着chrome瀏覽器或者火狐瀏覽器在網頁上看視頻,甚至還會打開word軟件,編輯文檔。
假設現在電腦上同時打開這四個程序,QQ,網易雲音樂,chrome瀏覽器,word軟件,此時對電腦主機來說,CPU(中央處理器)會在這打開的四個程序中依次循環切換。
現在一顆主流的CPU的主頻為2.5Ghz,其意思就是說在1秒鍾內,這顆CPU可以在上述四個程序中來回切換2.5乘以10的9次方次
所以在使用電腦的人看來,電腦是在同時執行這四個程序。
在CPU運行的過程中,每一個CPU時間點內,一核心cpu只能運行一個進程。
也就是說在某個CPU時間片上,一個CPU核心如果切換到QQ程序時,其余三個程序會被CPU暫停,也即阻塞,不過這個阻塞的時間間隔很短。
同樣的,在某個時刻,當chrome瀏覽器在運行的時候,其余的三個程序也會被暫停。
當程序切換的時候,需要一個媒介來保存程序的運行,暫停,恢復等信息,這就個媒介就是進程。
進程的概念
-
進程是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統的結構基礎。
-
進程是系統進行資源分配和調度的一個獨立單位。
-
進程一般由程序,數據集,進程控制塊三部分組成:
程序用來描述進程要完成哪些功能以及如何完成
數據集是程序在執行過程中所需要使用的資源
進程控制塊用來記錄進程的外部特征,描述進程的執行變化過程,操作系統可以利用它來控制和管理進程,控制塊是系統感知進程存在的唯一標志
2.線程的概念
假設在用瀏覽器打開一個網頁,這時瀏覽器一邊把網頁下載到硬盤上,瀏覽器一邊對網頁進行渲染,生成用戶看到網頁。
在這同時,瀏覽器還要與網頁服務器保持連接。在這個過程中,瀏覽器會生成多個進程,同時會在這多個進程之間來回切換。
這多個進程的協作涉及到進程間通信問題,進程間不停的切換造成主機性能上的損失。
這時就需要一種機制來保存和恢復進程間的通信內容,減少通信所帶來的性能損耗,這種機制就是線程
線程的出現是為了降低上下文切換的消耗,提高系統的並發性,並突破一個進程在一個時間點只能服務一個程序的缺陷,拿到進程內並發成為可能。
線程也叫輕量級進程 ,是一個基本的CPU執行單元,也是程序執行過程中的最小單元
線程由線程ID,程序講數器,寄存器集合和堆棧共同組成。
線程是進程的一個實體,是cpu調度和分派的基本單位,是比進程更小的能獨立運行的基本單位。
線程的引入減小了程序 並發執行時的開銷,提高了操作系統的並發性能。線程沒有自己的系統資源。
3.進程與線程的關系
1.一個線程只能屬於一個進程 ,而一個進程可以有多個線程,但至少有一個線程
2.資源分配給進程,同一個進程的所有線程共享該進程的所有資源
3.CPU的資源分給線程,即真正在CPU上運行的是線程
4.進程擁有它自己的獨立空間。線程是通過進程創建的,在進程之間共享該進程的內存空間
5.線程直接訪問進程的數據塊,進程是將父進程中的數據再復制出一份使用
6.進程中的線程間是可以直接通信的,子進程與父進程不能直接通信,但可以通過隊列管道相互交流數據
7.一個新的線程創建很容易,一個新的進程創建需要從父進程里重新拷貝父進程的所有數據,創建進程會耗費系統資源
8.一個進程中的多線程間可以控制其它進程,進程只能控制它的子進程
9.改變主線程優先級會影響線程在進程中的行為,改變父進程不會影響子進程
4.進程與線程的切換原則
首先要明白的是,進程的切換者是操作系統
4.1 CPU遇到時間片會切換進程
在現代操作系統中,不可能只運行一個程序。當操作系統中運行了多個程序的時候,CPU不可能一直執行某一個程序,
CPU會在操作系統運行的多個程序間來回進行切換,這個CPU的時間片是非常短的。
4.2 程序遇到IO操作的時候
例如,在系統上運行了兩個程序,程序A和程序B,當程序A在請求某個網頁的時候,由於網絡的延遲,網頁從服務器上響應到本地緩存中需要一些時間
這個時間相對於CPU來說是很長的,此時CPU就會切換到程序B運行,
4.3 程序優先級切換
在操作系統中,通常每生成一個進程,這個進程都會有一個執行的優先級。
例如在linux系統中,可以使用renice命令來調整進程的運行優先級。
在某一個時刻,操作系統中運行多個程序時,哪個進程的運行優先級越高,這個進程就先執行。