Ⅰ 什麼是進程和線程區別
1、本質不同
進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元。
2、數量不同
同一個進程中可以包括多個線程,並且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進行至少包括一個線程。
進程的特徵:
1、動態性:進程的實質是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。
2、並發性:任何進程都可以同其他進程一起並發執行
3、獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位;
4、非同步性:由於進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進
5、結構特徵:進程由程序、數據和進程式控制制塊三部分組成。
多個不同的進程可以包含相同的程序:一個程序在不同的數據集里就構成不同的進程,能得到不同的結果;但是執行過程中,程序不能發生改變。
Ⅱ 進程和線程有什麼區別
1、功能不同
進程是計算機中的程序關於某數據集合上的伍世猜一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。
線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。
2、工作原返敬理不同
在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。
線程是獨立調度和分派的基本單位。線程可以為操作系統內核調度的內核線程,如Win32線程;由用戶進程自行調度的用戶線程,如Linux平台的POSIX Thread;或者由內核與用戶進程,如Windows 7的線程,進行混合調度。
3、作用不同
進程是操作系統中最基本、重要的概念。是多道程序系統出現後,為了刻畫系統內部出現的動態情況,描述系統內部各道程序的活動規律引進的一個概念,所有多道程序設計操作系統都建立在進程的基礎上。
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。
(2)程序進程線程什麼意思擴展閱讀
進程是由進程式控制制塊,程序段,數據段三部分組成。一個進程可以包含若干線程(Thread),線程可以幫助應用程序同時做幾件事(比如一個線程向磁碟寫入文件,另一個腔型則接收用戶的按鍵操作並及時做出反應,互相不幹擾)。
在程序被運行後,系統首先要做的就是為該程序進程建立一個默認線程,然後程序可以根據需要自行添加或刪除相關的線程。是可並發執行的程序。
在一個數據集合上的運行過程,是系統進行資源分配和調度的一個獨立單位,也是稱活動、路徑或任務,它有兩方面性質:活動性、並發性。
進程可以劃分為運行,阻塞,就緒三種狀態,並隨一定條件而相互轉化,就緒運行,運行阻塞,阻塞就緒。
進程為應用程序的運行實例,是應用程序的一次動態執行。看似高深,我們可以簡單地理解為:它是操作系統當前運行的執行程序。
在系統當前運行的執行程序里包括:系統管理計算機個體和完成各種操作所必需的程序;用戶開啟、執行的額外程序,當然也包括用戶不知道,而自動運行的非法程序(它們就有可能是病毒程序)。
Ⅲ 進程和線程分別怎麼理解
說法一:進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行
說法二:進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的並發性。進程和線程的區別在於:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小於進程,使得多線程程序的並發性高。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執宏隱悉行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
說法三:多線程共存於應用程序中是現代操作系統中的基本特徵和重要標志。用過UNIX操作系統的讀者知道進程,在UNIX操作系統中,每個應用程序的執行都在操作系統內核中登記一個進程標志,操作系統根據分配的標志對應用程序的執行進行調度和系統資源分配,但進程和線程有什麼區別呢?
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的並發性。進程和線程的區別在於:
線程的劃分尺度小於進程,使得多線程程序的並發性搞。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,蔽乎從而極大地提高了程序的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
進程(Process)是最初定義在Unix等多用戶、多任務操作系統環境下用於表示應用程序在內存環境中基本執行單攜遲元的概念。以Unix操作系統為例,進程是Unix操作系統環境中的基本成分、是系統資源分配的基本單位。Unix操作系統中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統對應用程序進程的控制來實現的。
C、C++、Java等語言編寫的源程序經相應的編譯器編譯成可執行文件後,提交給計算機處理器運行。這時,處在可執行狀態中的應用程序稱為進程。從用戶角度來看,進程是應用程序的一個執行過程。從操作系統核心角度來看,進程代表的是操作系統分配的內存、CPU時間片等資源的基本單位,是為正在運行的程序提供的運行環境。進程與應用程序的區別在於應用程序作為一個靜態文件存儲在計算機系統的硬碟等存儲空間中,而進程則是處於動態條件下由操作系統維護的系統資源管理實體。多任務環境下應用程序進程的主要特點包括:
●進程在執行過程中有內存單元的初始入口點,並且進程存活過程中始終擁有獨立的內存地址空間;
●進程的生存期狀態包括創建、就緒、運行、阻塞和死亡等類型;
●從應用程序進程在執行過程中向CPU發出的運行指令形式不同,可以將進程的狀態分為用戶態和核心態。處於用戶態下的進程執行的是應用程序指令、處於核心態下的應用程序進程執行的是操作系統指令。
在Unix操作系統啟動過程中,系統自動創建swapper、init等系統進程,用於管理內存資源以及對用戶進程進行調度等。在Unix環境下無論是由操作系統創建的進程還要由應用程序執行創建的進程,均擁有唯一的進程標識(PID)。
說法四:應用程序在執行過程中存在一個內存空間的初始入口點地址、一個程序執行過程中的代碼執行序列以及用於標識進程結束的內存出口點地址,在進程執行過程中的每一時間點均有唯一的處理器指令與內存單元地址相對應。
Java語言中定義的線程(Thread)同樣包括一個內存入口點地址、一個出口點地址以及能夠順序執行的代碼序列。但是進程與線程的重要區別在於線程不能夠單獨執行,它必須運行在處於活動狀態的應用程序進程中,因此可以定義線程是程序內部的具有並發性的順序代碼流。
Unix操作系統和Microsoft Windows操作系統支持多用戶、多進程的並發執行,而Java語言支持應用程序進程內部的多個執行線程的並發執行。多線程的意義在於一個應用程序的多個邏輯單元可以並發地執行。但是多線程並不意味著多個用戶進程在執行,操作系統也不把每個線程作為獨立的進程來分配獨立的系統資源。進程可以創建其子進程,子進程與父進程擁有不同的可執行代碼和數據內存空間。而在用於代表應用程序的進程中多個線程共享數據內存空間,但保持每個線程擁有獨立的執行堆棧和程序執行上下文(Context)。
基於上述區別,線程也可以稱為輕型進程 (Light Weight Process,LWP)。不同線程間允許任務協作和數據交換,使得在計算機系統資源消耗等方面非常廉價。
線程需要操作系統的支持,不是所有類型的計算機都支持多線程應用程序。Java程序設計語言將線程支持與語言運行環境結合在一起,提供了多任務並發執行的能力。這就好比一個人在處理家務的過程中,將衣服放到洗衣機中自動洗滌後將大米放在電飯鍋里,然後開始做菜。等菜做好了,飯熟了同時衣服也洗好了。
需要注意的是:在應用程序中使用多線程不會增加 CPU 的數據處理能力。只有在多CPU 的計算機或者在網路計算體系結構下,將Java程序劃分為多個並發執行線程後,同時啟動多個線程運行,使不同的線程運行在基於不同處理器的Java虛擬機中,才能提高應用程序的執行效率。
Ⅳ 進程和線程是什麼意思
進程是指在系統中正在運行的一個應用程序;線程是系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元。對於操 作系統而言,其調度單元是線程。一個進程至少包括一個線程,通常將該線程稱為主線程。一個進程從主線程的執行開始進而創建一個或多個附加線程,就是所謂基於多線程的多任務。
最基本的系統進程慶譽列表:
smss.exe Session Manager
csrss.exe 子系統伺服器進程
winlogon.exe 管理用戶登錄
services.exe 包含很多系統服務
lsass.exe 管理 IP 安全策略以及啟動 ISAKMP/Oakley (IKE) 和 IP 安全驅動程序。(系統服務)
產生會話密鑰以及授予用於互動式客戶/伺服器驗證的服務憑據(ticket)。(系統服務)
svchost.exe 包含很多系統服務
svchost.exe
SPOOLSV.EXE 將文件載入到內存中以便遲後列印。(系統服務)
explorer.exe 資源管理器
internat.exe 托盤區的拼音圖標
附加的系統進程(這些進程不是必要的,你可以根據需要通過服務管理器來增加或減少):
mstask.exe 允許程序在指定時間運行。(系統服務)
regsvc.exe 允許遠程注冊表操作。(系統服務)
winmgmt.exe 提供系統管理信息(系統服務)。
inetinfo.exe 通過 Internet 信息服務的管理單元提供 FTP 連接和管理。(系統服務)
tlntsvr.exe 允許遠程用戶登錄到系統並且使用命令行運行控制台程序。(系統服務)
允許通過 Internet 信息服務的管理單元管理 Web 和 FTP 服務。(系統服務)
tftpd.exe 實現 TFTP Internet 標准。該標准不要求用戶名和密碼。遠程安裝服務的一部分。(系統服務)
termsrv.exe 提供多會話環境允許客戶端設備訪問虛擬的 Windows 2000 Professional 桌面會話以及運行在伺服器上的基
於 Windows 的程序。(系統服務)
dns.exe 應答對域名系統(DNS)名稱的查詢和更新請求。(系統服務)
以下服務很少會用到,上面的服務都對安全有害,如果不是必要的應該關掉
tcpsvcs.exe 提供在 PXE 可遠程啟動客戶計算機上遠程安裝 Windows 2000 Professional 的能力。(系統服務)
支持以下 TCP/IP 服務:Character Generator, Daytime, Discard, Echo, 以及 Quote of the Day。(系統服務)
ismserv.exe 允許在 Windows Advanced Server 站點間發送和接收消息。(系統服務)
ups.exe 管理連接到計算機的不間斷電源(UPS)。(系統服務)
wins.exe 為注冊和解析 NetBIOS 型名稱的 TCP/IP 客戶提供 NetBIOS 名稱服務。(系統服務)
llssrv.exe License Logging Service(system service)
ntfrs.exe 在多個伺服器間維護文件目錄內容的文件同步。(系統服務)
RsSub.exe 控制用來遠程儲存數據的媒體。(系統服務)
locator.exe 管理 RPC 名稱服務資料庫。(系統服務)
lserver.exe 注冊客戶端許可證。(系統服務)
dfssvc.exe 管理分布於區域網或廣域網的邏輯卷。(系統服務)
clipsrv.exe 支持「剪貼簿查看器」,以便可以從遠程剪貼簿查閱剪貼頁面。(系慎者統服務)
msdtc.exe 並列事務,是分布於兩個以上的資料庫,消譽孝段息隊列,文件系統,或其它事務保護資源管理器。(系統服務)
faxsvc.exe 幫助您發送和接收傳真。(系統服務)
cisvc.exe Indexing Service(system service)
dmadmin.exe 磁碟管理請求的系統管理服務。(系統服務)
mnmsrvc.exe 允許有許可權的用戶使用 NetMeeting 遠程訪問 Windows 桌面。(系統服務)
netdde.exe 提供動態數據交換 (DDE) 的網路傳輸和安全特性。(系統服務)
smlogsvc.exe 配置性能日誌和警報。(系統服務)
rsvp.exe 為依賴質量服務(QoS)的程序和控制應用程序提供網路信號和本地通信控制安裝功能。(系統服務)
RsEng.exe 協調用來儲存不常用數據的服務和管理工具。(系統服務)
RsFsa.exe 管理遠程儲存的文件的操作。(系統服務)
grovel.exe 掃描零備份存儲(SIS)卷上的重復文件,並且將重復文件指向一個數據存儲點,以節省磁碟空間。(系統服務)
SCardSvr.exe 對插入在計算機智能卡閱讀器中的智能卡進行管理和訪問控制。(系統服務)
snmp.exe 包含代理程序可以監視網路設備的活動並且向網路控制台工作站匯報。(系統服務)
snmptrap.exe 接收由本地或遠程 SNMP 代理程序產生的陷阱消息,然後將消息傳遞到運行在這台計算機上 SNMP 管理程序
。(系統服務)
UtilMan.exe 從一個窗口中啟動和配置輔助工具。(系統服務)
msiexec.exe 依據 .MSI 文件中包含的命令來安裝、修復以及刪除軟體。(系統服務)
什麼是系統服務
在Windows 2000/XP/2003系統中,服務是指執行指定系統功能的程序、常式或進程,以便支持其他程序,尤其是低層(接近硬體)程序。通過網路提供服務時,服務可以在Active Directory(活動目錄)中發布,從而促進了以服務為中心的管理和使用。
服務是一種應用程序類型,它在後台運行。服務應用程序通常可以在本地和通過網路為用戶提供一些功能,例如客戶端/伺服器應用程序、Web伺服器、資料庫伺服器以及其他基於伺服器的應用程序。
2.系統服務的作用
(1)啟動、停止、暫停、恢復或禁用遠程和本地計算機服務。
(2)管理本地和遠程計算機上的服務。
(3)設置服務失敗時的故障恢復操作。例如,重新自動啟動服務或重新啟動計算機。
(4)為特定的硬體配置文件啟用或禁用服務。
(5)查看每個服務的狀態和描述。
Ⅳ 一篇讓你明白進程與線程之間的區別與聯系
前言
本章主要介紹進程與線程的區別與聯系相關知識點,也是我們面試過程中,經常會問到的了一個問題。希望通過這篇文章,能讓雀叢大家理解相關知識點~
涉及頃啟櫻面試題:
1. 小栗子:
進程(Process) 是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。 在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。程序是指令、數據及其組織形式的描述,進程是程序的實體。
線程(thread) 是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以並發多個線程,每條線程並行執行不同的任務。
進程:指在系統中正在運行的一個應用程序;程序一旦運行就是進程;進程——資源分配的最小單位。
線程:系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元執行流。線程——程序執行的最小單位。
2. 深入理解:
2.1 進程(線程+內存+文件/網路句柄)
我們通旁絕過上面的圖片進行進一步理解:
「內存」: 我們通常所理解的內存是我們所見到的(2G/4G/8G/16G)物理內存,它為什麼會在進程之中呢? 實際上,這里的內存是邏輯內存。指的是內存的定址空間。每個進程的內存是相互獨立的。 否則的話會出現一個問題:我們把指針的值改一改就指向其他進程的內存了,通過這樣我們豈不是就可以看到其他進程中"微信"或者是"網上銀行"的信息, 這樣的話,那我們的微信聊天記錄或者是銀行賬戶的信息就都被別人找到了,這是一個很危險的信號!顯然這樣是不可能的。
「文件/網路句柄」: 它們是所有的進程所共有的,例如打開同一個文件,去搶同一個網路的埠這樣的操作是被允許的。
「線程」: 接下來,我們就要介紹一下我們的「線程」有關知識
2.2 線程(棧+PC+TLS)
2.2.1 棧:
我們通常都是說調用堆棧,其實這里的堆是沒有含義的,調用堆棧就是調用棧的意思。 那麼我們的棧裡面有什麼呢? 我們從主線程的入口main函數,會不斷的進行函數調用, 每次調用的時候,會把所有的參數和返回地址壓入到棧中。
2.2.2 PC:
Program Counter 程序計數器,操作系統真正運行的是一個個的線程, 而我們的進程只是它的一個容器。PC就是指向當前的指令,而這個指令是放在內存中。 每個線程都有一串自己的指針,去指向自己當前所在內存的指針。 計算機絕大部分是存儲程序性的,說的就是我們的數據和程序是存儲在同一片內存里的 這個內存中既有我們的數據變數又有我們的程序。所以我們的PC指針就是指向我們的內存的。
2.2.2.1 緩沖區溢出
例如我們經常聽到一個漏洞: 緩沖區溢出 這是什麼意思呢? 例如:我們有個地方要輸入用戶名,本來是用來存數據的地方。 然後黑客把數據輸入的特別長。這個長度超出了我們給數據存儲的內存區,這時候跑到了 我們給程序分配的一部分內存中。黑客就可以通過這種辦法將他所要運行的代碼 寫入到用戶名框中,來植入進來。我們的解決方法就是,用用戶名的長度來限制不要超過 用戶名的緩沖區的大小來解決。
2.3 TLS:
全稱:thread local storage 之前我們看到每個進程都有自己獨立的內存,這時候我們想,我們的線程有沒有一塊獨立的內存呢?答案是有的,就是TLS。 可以用來存儲我們線程所獨有的數據。 可以看到:線程才是我們操作系統所真正去運行的,而進程呢,則是像容器一樣他把需要的一些東西放在了一起,而把不需要的東西做了一層隔離,進行隔離開來。
3. 進程之間的是怎麼進行交互的呢?
通過TCP/IP的埠來實現
在後續的文章中我們將一一詳細介紹!
4. 線程之間又是怎樣進行交互?
線程的通信就比較簡單,有一大塊共享的內存,只要大家的指針是同一個就可以看到各自的內存。
在後續的文章中我們將一一詳細介紹!
5.小結:
1.進程要分配一大部分的內存,而線程只需要分配一部分棧就可以了. 2.一個程序至少有一個進程,一個進程至少有一個線程. 3.進程是資源分配的最小單位,線程是程序執行的最小單位。 4.一個線程可以創建和撤銷另一個線程,同一個進程中的多個線程之間可以並發執行.
文末
Ⅵ 什麼是線程它與進程有什麼異同
線程的定義:線程(thread),台灣地區譯為執行緒緒程,操作系統技術中的術語,是操作系統能夠進行運算調度的最小單位,它被包涵在進程之中,是行程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以並行多個線程,每條線程並行執行不同的任務。在Unix SystemV及SunOS中也被稱為輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱為線程。計算機科學術語,指運行中的程序的調度單位。
線程(thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以並發多個線程,每條線程並行執行不同的任務。
線程是獨立調度和分派的基本單位。線程可以為操作系統內核調度的內核線程,如首老尺Win32線程;由用戶進程自行調度的用戶線程,如Linux平台的POSIXThread;或者由內核與用戶進程,如Windows7的線程,進行混合調度。
同一進程中的多條線程將共享該進程中的全部系統資源,如虛擬地址空間,文件描述者高符和信號處理等等。但同一進程中的多個線程有各自的調用棧(callstack),自己的寄存器環境(registercontext),自己的線程本地存儲(thread-localstorage)。
一個進程可以有很多線程,每條線程並行執行不同的任務。
線程與進程的區別如下:
1、進程是資源分配的最小單位,線程是資源調度的最小單位。
2、線程是在進程下運行的。一個進程可以包含多個線程。
3、進程有自己的獨立地址空間,每啟動一個進程,系統就會為它分配地址空間。而線程是共享進程中的數據的,使用相同的地址空間。
4、同一進程下不同線含襲程間數據容易共享,不同進程間數據很難共享。
Ⅶ 什麼是進程什麼是線程
進宴州拍程是系統中正在運行的一個程序,程序一旦運行就是進程。線程是進程的一個實體,是進程的一條執行路徑。
進程可以看成程序執行的一個實例。進程是系統資源分配的獨立實體,每個進程都跡襪擁有獨立的地址空間。一晌羨個進程無法訪問另一個進程的變數和數據結構,如果想讓一個進程訪問另一個進程的資源,需要使用進程間通信,比如管道,文件,套接字等。
Ⅷ 什麼是進程什麼是線程他們之間有什麼關系
什麼是系統進程
進程是指在系統中正在運行的一個應用程序;線程是系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元。對於操作系統而言,其調度單元是線程。一個進程至少包括一個線程,通常將該線程稱為主線程。一個進程從主線程的執行開始進而創建一個或多個附加線程,就是所謂基於多線程的多任務。
那進程與線程的區別到底是什麼?進程是執行程序的實例。例如,當你運行記事本程序(Nodepad)時,你就創建了一個用來容納組成
Notepad.exe的代碼及其所需調用動態鏈接庫的進程。每個進程均運行在其專用且受保護的地址空間內。因此,如果你同時運行記事本的兩個拷貝,該程序正在使用的數據在各自實例中是彼此獨立的。在記事本的一個拷貝中將無法看到該程序的第二個實例打開的數據。
以沙箱為例進行闡述。一個進程就好比一個沙箱。線程就如同沙箱中的孩子們。孩子們在沙箱子中跑來跑去,並且可能將沙子攘到別的孩子眼中,他們會互相踢打或撕咬。但是,這些沙箱略有不同之處就在於每個沙箱完全由牆壁和頂棚封閉起來,無論箱中的孩子如何狠命地攘沙,他們也不會影響到其它沙箱中的其他孩子。因此,每個進程就象一個被保護起來的沙箱。未經許可,無人可以進出。
實際上線程運行而進程不運行。兩個進程彼此獲得專用數據或內存的唯一途徑就是通過協議來共享內存塊。這是一種協作策略。下面讓我們分析一下任務管理器里的進程選項卡。
這里的進程是指一系列進程,這些進程是由它們所運行的可執行程序實例來識別的,這就是進程選項卡中的第一列給出了映射名稱的原因。請注意,這里並沒有進程名稱列。進程並不擁有獨立於其所歸屬實例的映射名稱。換言之,如果你運行5個記事本拷貝,你將會看到5個稱為Notepad.exe的進程。它們是如何彼此區別的呢?其中一種方式是通過它們的進程ID,因為每個進程都擁有其獨一無二的編碼。該進程ID由Windows
NT或Windows
2000生成,並可以循環使用。因此,進程ID將不會越編越大,它們能夠得到循環利用。第三列是被進程中的線程所佔用的CPU時間百分比。它不是CPU的編號,而是被進程佔用的CPU時間百分比。此時我的系統基本上是空閑的。盡管系統看上去每一秒左右都只使用一小部分CPU時間,但該系統空閑進程仍舊耗用了大約99%的CPU時間。
第四列,CPU時間,是CPU被進程中的線程累計佔用的小時、分鍾及秒數。請注意,我對進程中的線程使用佔用一詞。這並不一定意味著那就是進程已耗用的CPU時間總和,因為,如我們一會兒將看到的,NT計時的方式是,當特定的時鍾間隔激發時,無論誰恰巧處於當前的線程中,它都將計算到CPU周期之內。通常情況下,在大多數NT系統中,時鍾以10毫秒的間隔運行。每10毫秒NT的心臟就跳動一下。有一些驅動程序代碼片段運行並顯示誰是當前的線程。讓我們將CPU時間的最後10毫秒記在它的帳上。因此,如果一個線程開始運行,並在持續運行8毫秒後完成,接著,第二個線程開始運行並持續了2毫秒,這時,時鍾激發,請猜一猜這整整10毫秒的時鍾周期到底記在了哪個線程的帳上?答案是第二個線程。因此,NT中存在一些固有的不準確性,而NT恰是以這種方式進行計時,實際情況也如是,大多數32位操作系統中都存在一個基於間隔的計時機制。請記住這一點,因為,有時當你觀察線程所耗用的CPU總和時,會出現盡管該線程或許看上去已運行過數十萬次,但其CPU時間佔用量卻可能是零或非常短暫的現象,那麼,上述解釋便是原因所在。上述也就是我們在任務管理器的進程選項卡中所能看到的基本信息列。
什麼是線程?
究竟什麼是線程呢?正如在圖A中所示,一個線程是給定的指令的序列
(你所編寫的代碼),一個棧(在給定的方法中定義的變數),以及一些共享數據(類一級的變數)。線程也可以從全局類中訪問靜態數據。
棧以及可能的一些共享數據
每個線程有其自己的堆棧和程序計數器(PC)。你可以把程序計數器(PC)設想為用於跟蹤線程正在執行的指令,而堆棧用於跟蹤線程的上下文,上下文是當線程執行到某處時,當前的局部變數的值。雖然你可以編寫出在線程之間傳送數據的子程序,在正常情況下,一個線程不能訪問另外一個線程的棧變數。
一個線程必須處於如下四種可能的狀態之一,這四種狀態為:
初始態:一個線程調用了new方法之後,並在調用start方法之前的所處狀態。在初始態中,可以調用start和stop方法。
Runnable:一旦線程調用了start
方法,線程就轉到Runnable
狀態,注意,如果線程處於Runnable狀態,它也有可能不在運行,這是因為還有優先順序和調度問題。
阻塞/
NonRunnable:線程處於阻塞/NonRunnable狀態,這是由兩種可能性造成的:要麼是因掛起而暫停的,要麼是由於某些原因而阻塞的,例如包括等待IO請求的完成。
退出:線程轉到退出狀態,這有兩種可能性,要麼是run方法執行結束,要麼是調用了stop方法。
最後一個概念就是線程的優先順序,線程可以設定優先順序,高優先順序的線程可以安排在低優先順序線程之前完成。一個應用程序可以通過使用線程中的方法setPriority(int),來設置線程的優先順序大小。