說法一進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動進程是系統進行資源分配和調度的一個獨立單位
線程是進程的一個實體是CPU調度和分派的基本單位它是比進程更小的能獨立運行的基本單位線程自己基本上不擁有系統資源只擁有一點在運行中必不可少的資源(如程序計數器一組寄存器和棧)但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行
說法二進程和線程都是由操作系統所體會的程序運行的基本單元系統利用該基本單元實現系統對應用的並發性進程和線程的區別在於
簡而言之一個程序至少有一個進程一個進程至少有一個線程
線程的劃分尺度小於進程使得多線程程序的並發性高
另外進程在執行過程中擁有獨立的內存單元而多個線程共享內存從而極大地提高了程序的運行效率
線程在執行過程中與進程還是有區別的每個獨立的線程有一個程序運行的入口順序執行序列和程序的出口但是線程不能夠獨立執行必須依存在應用程序中由應用程序提供多個線程執行控制
從邏輯角度來看多線程的意義在於一個應用程序中有多個執行部分可以同時執行但操作系統並沒有將多個線程看做多個獨立的應用來實現進程的調度和管理以及資源分配這就是進程和線程的重要區別
說法三多線程共存於應用程序中是現代操作系統中的基本特征和重要標志用過UNIX操作系統的讀者知道進程在UNIX操作系統中每個應用程序的執行都在操作系統內核中登記一個進程標志操作系統根據分配的標志對應用程序的執行進行調度和系統資源分配但進程和線程有什麼區別呢?
進程和線程都是由操作系統所體會的程序運行的基本單元系統利用該基本單元實現系統對應用的並發性進程和線程的區別在於
線程的劃分尺度小於進程使得多線程程序的並發性搞
另外進程在執行過程中擁有獨立的內存單元而多個線程共享內存從而極大地提高了程序的運行效率
線程在執行過程中與進程還是有區別的每個獨立的線程有一個程序運行的入口順序執行序列和程序的出口但是線程不能夠獨立執行必須依存在應用程序中由應用程序提供多個線程執行控制
從邏輯角度來看多線程的意義在於一個應用程序中有多個執行部分可以同時執行但操作系統並沒有將多個線程看做多個獨立的應用來實現進程的調度和管理以及資源分配這就是進程和線程的重要區別
進程(Process)是最初定義在Unix等多用戶多任務操作系統環境下用於表示應用程序在內存環境中基本執行單元的概念以Unix操作系統為例進程是Unix操作系統環境中的基本成分是系統資源分配的基本單位Unix操作系統中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統對應用程序進程的控制來實現的
CC++Java等語言編寫的源程序經相應的編譯器編譯成可執行文件後提交給計算機處理器運行這時處在可執行狀態中的應用程序稱為進程從用戶角度來看進程是應用程序的一個執行過程從操作系統核心角度來看進程代表的是操作系統分配的內存CPU時間片等資源的基本單位是為正在運行的程序提供的運行環境進程與應用程序的區別在於應用程序作為一個靜態文件存儲在計算機系統的硬盤等存儲空間中而進程則是處於動態條件下由操作系統維護的系統資源管理實體多任務環境下應用程序進程的主要特點包括
●進程在執行過程中有內存單元的初始入口點並且進程存活過程中始終擁有獨立的內存地址空間
●進程的生存期狀態包括創建就緒運行阻塞和死亡等類型
●從應用程序進程在執行過程中向CPU發出的運行指令形式不同可以將進程的狀態分為用戶態和核心態處於用戶態下的進程執行的是應用程序指令處於核心態下的應用程序進程執行的是操作系統指令
在Unix操作系統啟動過程中系統自動創建swapperinit等系統進程用於管理內存資源以及對用戶進程進行調度等在Unix環境下無論是由操作系統創建的進程還要由應用程序執行創建的進程均擁有唯一的進程標識(PID)
說法四應用程序在執行過程中存在一個內存空間的初始入口點地址一個程序執行過程中的代碼執行序列以及用於標識進程結束的內存出口點地址在進程執行過程中的每一時間點均有唯一的處理器指令與內存單元地址相對應
Java語言中定義的線程(Thread)同樣包括一個內存入口點地址一個出口點地址以及能夠順序執行的代碼序列但是進程與線程的重要區別在於線程不能夠單獨執行它必須運行在處於活動狀態的應用程序進程中因此可以定義線程是程序內部的具有並發性的順序代碼流
Unix操作系統和Microsoft Windows操作系統支持多用戶多進程的並發執行而Java語言支持應用程序進程內部的多個執行線程的並發執行多線程的意義在於一個應用程序的多個邏輯單元可以並發地執行但是多線程並不意味著多個用戶進程在執行操作系統也不把每個線程作為獨立的進程來分配獨立的系統資源進程可以創建其子進程子進程與父進程擁有不同的可執行代碼和數據內存空間而在用於代表應用程序的進程中多個線程共享數據內存空間但保持每個線程擁有獨立的執行堆棧和程序執行上下文(Context)
基於上述區別線程也可以稱為輕型進程 (Light Weight ProcessLWP)不同線程間允許任務協作和數據交換使得在計算機系統資源消耗等方面非常廉價
線程需要操作系統的支持不是所有類型的計算機都支持多線程應用程序Java程序設計語言將線程支持與語言運行環境結合在一起提供了多任務並發執行的能力這就好比一個人在處理家務的過程中將衣服放到洗衣機中自動洗滌後將大米放在電飯鍋裡然後開始做菜等菜做好了飯熟了同時衣服也洗好了
需要注意的是在應用程序中使用多線程不會增加 CPU 的數據處理能力只有在多CPU 的計算機或者在網絡計算體系結構下將Java程序劃分為多個並發執行線程後同時啟動多個線程運行使不同的線程運行在基於不同處理器的Java虛擬機中才能提高應用程序的執行效率
From:http://tw.wingwit.com/Article/Common/201311/5356.html