原文鏈接:http://www.differencebetween.info/difference-between-process-and-thread
關(guān)鍵差異:在多線程中糊肤,線程和進(jìn)程是兩個(gè)聯(lián)系緊密的術(shù)語琴昆。兩個(gè)術(shù)語的主要差異是線程是進(jìn)程的一部分。例如馆揉,一個(gè)進(jìn)程可以包含一個(gè)或者多個(gè)線程业舍,但是一個(gè)線程不能包含某個(gè)進(jìn)程。
在程序中升酣,有兩個(gè)基本的執(zhí)行單元:進(jìn)程和線程舷暮。他們都執(zhí)行一系列的指令。他們都是由某個(gè)程序或者操作系統(tǒng)啟動(dòng)噩茄。這篇文章幫助你去區(qū)分這兩個(gè)單元下面。
一個(gè)進(jìn)程是一個(gè)運(yùn)行中的程序的實(shí)例。它包含了程序代碼和它當(dāng)前的活動(dòng)绩聘。依賴于操作系統(tǒng)沥割,一個(gè)進(jìn)程可以由多個(gè)同時(shí)執(zhí)行指令的執(zhí)行線程構(gòu)成。一個(gè)程序是一系列指令的集合凿菩;一個(gè)進(jìn)程是這些指令的實(shí)際執(zhí)行驯遇。
進(jìn)程有一個(gè)獨(dú)立的執(zhí)行環(huán)境,它擁有一套完整的私有的基本運(yùn)行時(shí)資源蓄髓。尤其是叉庐,每個(gè)進(jìn)程擁有自己的內(nèi)存空間。進(jìn)程通常被認(rèn)為與其他程序或應(yīng)用程序相似会喝。然而陡叠,單個(gè)應(yīng)用程序的運(yùn)行實(shí)際上可能是一組協(xié)作的進(jìn)程玩郊。方便進(jìn)程的通信,大多數(shù)操作系統(tǒng)使用IPC(進(jìn)程間通信)資源枉阵,例如管道和套接字(sockets)译红。IPC資源也可用于不同系統(tǒng)上的進(jìn)程之間的通信。虛擬機(jī)中的大多數(shù)應(yīng)用程序作為單個(gè)進(jìn)程運(yùn)行兴溜。但是侦厚,它可以使用進(jìn)程構(gòu)建器對(duì)象創(chuàng)建其他進(jìn)程。
在計(jì)算機(jī)中拙徽,線程甚至可以執(zhí)行可由操作系統(tǒng)獨(dú)立管理的編程指令的最小序列刨沦。線程和進(jìn)程的應(yīng)用程序因操作系統(tǒng)而異。但是膘怕,線程由進(jìn)程構(gòu)成并存在于進(jìn)程中想诅。每個(gè)進(jìn)程至少有一個(gè)線程。多個(gè)線程可以存在于一個(gè)進(jìn)程岛心,共享資源来破,這有助于線程之間的高效通信。
在單處理器中忘古,處理器在不同線程之間切換時(shí)進(jìn)行多任務(wù)處理徘禁。它被稱為多線程。切換發(fā)生的很頻繁以至于線程或任務(wù)被用戶認(rèn)為是同時(shí)運(yùn)行的髓堪。線程在多處理器或多核系統(tǒng)可以真正的同時(shí)運(yùn)行晌坤,每個(gè)處理器或者核心同時(shí)執(zhí)行單獨(dú)的線程。
綜上所述旦袋,線程可以認(rèn)為是輕量級(jí)的進(jìn)程污抬,因?yàn)樗麄儼?jiǎn)單的指令集合酗宋,可以在一個(gè)更大的進(jìn)程運(yùn)行臂拓。計(jì)算機(jī)可以同時(shí)運(yùn)行多線程和多進(jìn)程距境。
比較進(jìn)程和線程:
名稱 | 進(jìn)程 | 線程 |
---|---|---|
定義 | 一個(gè)程序的正在執(zhí)行的實(shí)例叫做進(jìn)程 | 線程是進(jìn)程的子集 |
進(jìn)程 | 它有自己的父進(jìn)程的數(shù)據(jù)段副本 | 它可以直接訪問其進(jìn)程的數(shù)據(jù)段 |
通信 | 進(jìn)程必須使用進(jìn)程間通信才可以和兄弟進(jìn)程通信 | 線程可以直接和同一進(jìn)程的其他線程通信 |
開銷 | 進(jìn)程有大量的開銷 | 線程幾乎沒有開銷 |
創(chuàng)建 | 新進(jìn)程要求父進(jìn)程的副本 | 新線程創(chuàng)建很容易 |
控制 | 進(jìn)程只能控制子進(jìn)程 | 線程可以對(duì)處于相同進(jìn)程的線程進(jìn)行控制 |
改變 | 父進(jìn)程的任何改變都不會(huì)影響子進(jìn)程 | 主線程的所有改變可以影響進(jìn)程中其他線程的行為 |
內(nèi)存 | 在單獨(dú)的內(nèi)存空間運(yùn)行 | 共享內(nèi)存空間 |
文件描述符 | 大多數(shù)文件描述符不共享 | 共享文件描述符 |
文件系統(tǒng) | 沒有文件系統(tǒng)上下文共享 | 共享文件系統(tǒng)上下文 |
信號(hào) | 不共享信號(hào)處理 | 共享信號(hào)處理 |
被控制 | 進(jìn)程由操作系統(tǒng)控制 | 線程由開發(fā)者在程序中控制 |
依賴 | 進(jìn)程是獨(dú)立的 | 線程不是獨(dú)立的 |