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