摘要:線程線程,有時(shí)被稱為輕量級進(jìn)程,,是程序執(zhí)行流的最小單元。進(jìn)程和線程區(qū)別進(jìn)程是資源分配的基本單位。說得簡單點(diǎn),下面這段代碼執(zhí)行的時(shí)候參考博文進(jìn)程與線程的一個(gè)簡單解釋多線程和多進(jìn)程的區(qū)別小結(jié)多線程還是多進(jìn)程的選擇及區(qū)別加鎖
關(guān)于進(jìn)程與線程的簡單理解(以工廠舉例:cup-》工廠,車間-》進(jìn)程,線程-》工人),可以參考阮一峰的博文進(jìn)程與線程的一個(gè)簡單圖文解釋
先來了解下進(jìn)程和線程的概念
關(guān)于多進(jìn)程和多線程,教科書上最經(jīng)典的一句話是“進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”。
進(jìn)程(Process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。在早期面向進(jìn)程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是程序的基本執(zhí)行實(shí)體;在當(dāng)代面向線程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是線程的容器。程序是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程是程序的實(shí)體。
線程線程(thread),有時(shí)被稱為輕量級進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。一個(gè)標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)兒在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運(yùn)行三種基本狀態(tài)。就緒狀態(tài)是指線程具備運(yùn)行的所有條件,邏輯上可以運(yùn)行,在等待處理機(jī);運(yùn)行狀態(tài)是指線程占有處理機(jī)正在運(yùn)行;阻塞狀態(tài)是指線程在等待一個(gè)事件(如某個(gè)信號量),邏輯上不可執(zhí)行。每一個(gè)程序都至少有一個(gè)線程,若程序只有一個(gè)線程,那就是程序本身。
線程是程序中一個(gè)單一的順序控制流程。進(jìn)程內(nèi)一個(gè)相對獨(dú)立的、可調(diào)度的執(zhí)行單元,是系統(tǒng)獨(dú)立調(diào)度和分派CPU的基本單位指運(yùn)行中的程序的調(diào)度單位。在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程。
進(jìn)程是資源分配的基本單位。所有與該進(jìn)程有關(guān)的資源,都被記錄在進(jìn)程控制塊PCB中。以表示該進(jìn)程擁有這些資源或正在使用它們。
另外,進(jìn)程也是搶占處理機(jī)的調(diào)度單位,它擁有一個(gè)完整的虛擬地址空間。當(dāng)進(jìn)程發(fā)生調(diào)度時(shí),不同的進(jìn)程擁有不同的虛擬地址空間,而同一進(jìn)程內(nèi)的不同線程共享同一地址空間。
與進(jìn)程相對應(yīng),線程與資源分配無關(guān),它屬于某一個(gè)進(jìn)程,并與進(jìn)程內(nèi)的其他線程一起共享進(jìn)程的資源。
線程只由相關(guān)堆棧(系統(tǒng)棧或用戶棧)寄存器和線程控制表TCB組成。寄存器可被用來存儲線程內(nèi)的局部變量,但不能存儲其他線程的相關(guān)變量。
通常在一個(gè)進(jìn)程中可以包含若干個(gè)線程,它們可以利用進(jìn)程所擁有的資源。在引入線程的操作系統(tǒng)中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位。由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)資源,故對它的調(diào)度所付出的開銷就會小得多,能更高效的提高系統(tǒng)內(nèi)多個(gè)程序間并發(fā)執(zhí)行的程度,從而顯著提高系統(tǒng)資源的利用率和吞吐量。因而近年來推出的通用操作系統(tǒng)都引入了線程,以便進(jìn)一步提高系統(tǒng)的并發(fā)性,并把它視為現(xiàn)代操作系統(tǒng)的一個(gè)重要指標(biāo)。
線程與進(jìn)程的區(qū)別可以歸納為以下4點(diǎn):
地址空間和其它資源(如打開文件):進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見。
通信:進(jìn)程間通信IPC,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信——需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性。
調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多。
在多線程OS中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。
多進(jìn)程和多線程的比較 一.為何需要多進(jìn)程(或者多線程),為何需要并發(fā)?這個(gè)問題或許本身都不是個(gè)問題。但是對于沒有接觸過多進(jìn)程編程的朋友來說,他們確實(shí)無法感受到并發(fā)的魅力以及必要性。
我想,只要你不是整天都寫那種int main()到底的代碼的人,那么或多或少你會遇到代碼響應(yīng)不夠用的情況,也應(yīng)該有嘗過并發(fā)編程的甜頭。就像一個(gè)快餐點(diǎn)的服務(wù)員,既要在前臺接待客戶點(diǎn)餐,又要接電話送外賣,沒有分身術(shù)肯定會忙得你焦頭爛額的。幸運(yùn)的是確實(shí)有這么一種技術(shù),讓你可以像孫悟空一樣分身,靈魂出竅,樂哉樂哉地輕松應(yīng)付一切狀況,這就是多進(jìn)程/線程技術(shù)。
并發(fā)技術(shù),就是可以讓你在同一時(shí)間同時(shí)執(zhí)行多條任務(wù)的技術(shù)。你的代碼將不僅僅是從上到下,從左到右這樣規(guī)規(guī)矩矩的一條線執(zhí)行。你可以一條線在main函數(shù)里跟你的客戶交流,另一條線,你早就把你外賣送到了其他客戶的手里。
所以,為何需要并發(fā)?因?yàn)槲覀冃枰鼜?qiáng)大的功能,提供更多的服務(wù),所以并發(fā),必不可少。
二.多進(jìn)程什么是進(jìn)程。最直觀的就是一個(gè)個(gè)pid,官方的說法就:進(jìn)程是程序在計(jì)算機(jī)上的一次執(zhí)行活動(dòng)。
說得簡單點(diǎn),下面這段代碼執(zhí)行的時(shí)候
參考博文:
進(jìn)程與線程的一個(gè)簡單解釋
多線程和多進(jìn)程的區(qū)別(小結(jié))
多線程還是多進(jìn)程的選擇及區(qū)別
MYsql加鎖
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21745.html
摘要:酷睿代在年取代了奔騰,主頻遠(yuǎn)低于此。該詞被敏捷開發(fā)團(tuán)隊(duì)使用較多,含義與形式會略有不同,更改已經(jīng)開始將垃圾收集器的狀態(tài)轉(zhuǎn)到解釋器,因此每個(gè)子解釋器將擁有它自己的本該如此。結(jié)論死亡了嗎對于單線程的應(yīng)用程序,仍然存活。showImg(https://user-gold-cdn.xitu.io/2019/5/19/16ad09f554fdf443); 本文原創(chuàng)并首發(fā)于公眾號【Python貓】,未經(jīng)授...
摘要:酷睿代在年取代了奔騰,主頻遠(yuǎn)低于此。該詞被敏捷開發(fā)團(tuán)隊(duì)使用較多,含義與形式會略有不同,更改已經(jīng)開始將垃圾收集器的狀態(tài)轉(zhuǎn)到解釋器,因此每個(gè)子解釋器將擁有它自己的本該如此。結(jié)論死亡了嗎對于單線程的應(yīng)用程序,仍然存活。showImg(https://user-gold-cdn.xitu.io/2019/5/19/16ad09f554fdf443); 本文原創(chuàng)并首發(fā)于公眾號【Python貓】,未經(jīng)授...
摘要:酷睿代在年取代了奔騰,主頻遠(yuǎn)低于此。該詞被敏捷開發(fā)團(tuán)隊(duì)使用較多,含義與形式會略有不同,更改已經(jīng)開始將垃圾收集器的狀態(tài)轉(zhuǎn)到解釋器,因此每個(gè)子解釋器將擁有它自己的本該如此。結(jié)論死亡了嗎對于單線程的應(yīng)用程序,仍然存活。 showImg(https://segmentfault.com/img/remote/1460000019229774); 本文原創(chuàng)并首發(fā)于公眾號【Python貓】,未經(jīng)授...
摘要:進(jìn)程與線程進(jìn)程和線程是操作系統(tǒng)的基本概念但是它們比較抽象不容易掌握。線程,有時(shí)被稱為輕量進(jìn)程,,是程序執(zhí)行流的最小單元。 進(jìn)程與線程 進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。 有一個(gè)很好的類比,可以把它們解釋地清晰易懂。 CPU 計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠,時(shí)刻在運(yùn)行。 假定工廠的電力有限,一次...
閱讀 730·2023-04-25 19:43
閱讀 3974·2021-11-30 14:52
閱讀 3801·2021-11-30 14:52
閱讀 3865·2021-11-29 11:00
閱讀 3796·2021-11-29 11:00
閱讀 3894·2021-11-29 11:00
閱讀 3571·2021-11-29 11:00
閱讀 6154·2021-11-29 11:00