進程:
進程是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動。它是操作系統動態執行的基
本單元,在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。
進程的兩個主要概念:
(1)進程是一個實體
每個進程都有它自己的存儲空間,一般情況下,包括文本區域、數據區域和堆棧區域。文本區域存儲處理器執行的代碼;數據區域存儲變量和進程執行期間使用的動態分配的內存;堆棧區域存儲活動過程中調用的指令和本地變量
(2)進程是一個執行中的程序
程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體,稱其為進程
進程是操作系統中最基本、重要的概念。是多道程序系統出現后,為了刻畫系統內部出現的動態情況,描述系統內部各道程序的活動規律引進的一個概念,所有多道程序設計的操作系統都建立在進程之上。
線程:
線程(Thread)又叫做輕量級進程。是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一個線程指的是進程中的一個單一順序的控制流,一個進程中可以並發多個線程,每個線程並行執行不同的任務。線程是獨立調度和分派的基本單位,線程可以為操作系統內核調度的的內核線程;由用戶調度的用戶線程;或者由內核與用戶進程進行混合調用。同一進程中的多個線程將共享該進程中的全部系統資源 ,但同一進程的多個線程有各自的調用棧(call stack),自己的寄存器 (register context),自己的線程本地存儲(thread-local storage)。線程與線程之間堆空間共享,棧空間獨立。
線程的屬性:獨立調度和執行的基本單位,輕型實體,可並發執行,共享進程資源。
線程的組成部分:CPU時間片,運行數據,線程的邏輯代碼。
線程的六個狀態:
① 初始狀態(NEW):一個尚未啟動的線程所處的狀態;
② 可運行狀態(RUNNABLE):可運行線程的線程狀態,可能正在運行,也可能在等待處理器資源;
③ 阻塞狀態之鎖阻塞(BLOCKED):被阻塞等待監視器鎖定的線程所處的狀態(即當一個線程試圖獲取鎖,但鎖此時被其他線程持有,該線程進入BLOCKED狀態,當線程拿到鎖則進入RUNNABLE狀態);
④ 阻塞狀態之無限等待(WAITING):未指定等待時間的線程所處的狀態(調用Object.join()或Object.wait()方法時進入此狀態,一個線程處於該狀態時,只能被另一個線程喚醒,而不能自己主動喚醒,另一個線程調用notify()或notifyAll()或中止狀態時來喚醒該線程);
⑤ 阻塞狀態之定時等待(TIMED_WAITING):指定等待時間的線程所處的狀態(調用Thread.sleep(long)或Object.join(long)或Object.wait(long)方法時進入此狀態,直到時間超時或收到喚醒通知,注意wait(0)時是可以自己蘇醒的,比如當Thread結束時就會自動蘇醒);
⑥ 終止狀態:已經執行完成的線程狀態。