C++基礎(chǔ)語法梳理:進(jìn)程與線程!知識(shí)點(diǎn)詳細(xì)梳理

進(jìn)程與線程
對(duì)于有線程系統(tǒng):
(1)進(jìn)程是資源分配的獨(dú)立單位
(2)線程是資源調(diào)度的獨(dú)立單位
對(duì)于無線程系統(tǒng):
(1)進(jìn)程是資源調(diào)度、分配的獨(dú)立單位
進(jìn)程之間的通信方式以及優(yōu)缺點(diǎn)
管道(PIPE)
(1)有名管道:一種半雙工的通信方式,它允許無親緣關(guān)系進(jìn)程間的通信
①優(yōu)點(diǎn):可以實(shí)現(xiàn)任意關(guān)系的進(jìn)程間的通信
②缺點(diǎn):a、長(zhǎng)期存于系統(tǒng)中,使用不當(dāng)容易出錯(cuò);b、緩沖區(qū)有限
(2)無名管道:一種半雙工的通信方式,只能在具有親緣關(guān)系的進(jìn)程間使用(父子進(jìn)程)
①優(yōu)點(diǎn):簡(jiǎn)單方便
②缺點(diǎn):a、局限于單向通信;b、只能創(chuàng)建在它的進(jìn)程以及其有親緣關(guān)系的進(jìn)程之間;c、緩沖區(qū)有限
信號(hào)量(Semaphore):一個(gè)計(jì)數(shù)器,可以用來控制多個(gè)線程對(duì)共享資源的訪問
①優(yōu)點(diǎn):可以同步進(jìn)程
②缺點(diǎn):信號(hào)量有限
信號(hào)(Signal):一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生
消息隊(duì)列(Message Queue):是消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)
①優(yōu)點(diǎn):可以實(shí)現(xiàn)任意進(jìn)程間的通信,并通過系統(tǒng)調(diào)用函數(shù)來實(shí)現(xiàn)消息發(fā)送和接收之間的同步,無需考慮同步問題,方便
②缺點(diǎn):信息的復(fù)制需要額外消耗 CPU 的時(shí)間,不適宜于信息量大或操作頻繁的場(chǎng)合
共享內(nèi)存(Shared Memory):映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問
①優(yōu)點(diǎn):無須復(fù)制,快捷,信息量大
②缺點(diǎn):a、通信是通過將共享空間緩沖區(qū)直接附加到進(jìn)程的虛擬地址空間中來實(shí)現(xiàn)的,因此進(jìn)程間的讀寫操作的同步問題;b、利用內(nèi)存緩沖區(qū)直接交換信息,內(nèi)存的實(shí)體存在于計(jì)算機(jī)中,只能同一個(gè)計(jì)算機(jī)系統(tǒng)中的諸多進(jìn)程共享,不方便網(wǎng)絡(luò)通信
套接字(Socket):可用于不同計(jì)算機(jī)間的進(jìn)程通信
①優(yōu)點(diǎn):
a、傳輸數(shù)據(jù)為字節(jié)級(jí),傳輸數(shù)據(jù)可自定義,數(shù)據(jù)量小效率高;
b、傳輸數(shù)據(jù)時(shí)間短,性能高;
c、適合于客戶端和服務(wù)器端之間信息實(shí)時(shí)交互;
d、可以加密,數(shù)據(jù)安全性強(qiáng);
②缺點(diǎn):需對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行解析,轉(zhuǎn)化成應(yīng)用級(jí)的數(shù)據(jù)。
線程之間的通信方式
鎖機(jī)制
包括互斥鎖/量(mutex)、讀寫鎖(reader-writer lock)、自旋鎖(spin lock)、條件變量(condition)
(1)互斥鎖/量(mutex):提供了以排他方式防止數(shù)據(jù)結(jié)構(gòu)被并發(fā)修改的方法。
(2)讀寫鎖(reader-writer lock):允許多個(gè)線程同時(shí)讀共享數(shù)據(jù),而對(duì)寫操作是互斥的。
(3)自旋鎖(spin lock)與互斥鎖類似,都是為了保護(hù)共享資源?;コ怄i是當(dāng)資源被占用,申請(qǐng)者進(jìn)入睡眠狀態(tài);而自旋鎖則循環(huán)檢測(cè)保持者是否已經(jīng)釋放鎖。
(4)條件變量(condition):可以以原子的方式阻塞進(jìn)程,直到某個(gè)特定條件為真為止。對(duì)條件的測(cè)試是在互斥鎖的保護(hù)下進(jìn)行的。條件變量始終與互斥鎖一起使用。
信號(hào)量機(jī)制(Semaphore)
(1)無名線程信號(hào)量
(2)命名線程信號(hào)量
信號(hào)機(jī)制(Signal):類似進(jìn)程間的信號(hào)處理
屏障(barrier):屏障允許每個(gè)線程等待,直到所有的合作線程都達(dá)到某一點(diǎn),然后從該點(diǎn)繼續(xù)執(zhí)行。
線程間的通信目的主要是用于線程同步,所以線程沒有像進(jìn)程通信中的用于數(shù)據(jù)交換的通信機(jī)制
進(jìn)程之間私有和共享的資源
私有:地址空間、堆、全局變量、棧、寄存器
共享:代碼段,公共數(shù)據(jù),進(jìn)程目錄,進(jìn)程 ID
線程之間私有和共享的資源
私有:線程棧,寄存器,程序計(jì)數(shù)器
共享:堆,地址空間,全局變量,靜態(tài)變量
多進(jìn)程與多線程間的對(duì)比、優(yōu)劣與選擇
對(duì)比

優(yōu)劣

選擇
(1)需要頻繁創(chuàng)建銷毀的優(yōu)先用線程
(2)需要進(jìn)行大量計(jì)算的優(yōu)先使用線程
(3)強(qiáng)相關(guān)的處理用線程,弱相關(guān)的處理用進(jìn)程
(4)可能要擴(kuò)展到多機(jī)分布的用進(jìn)程,多核分布的用線程
(5)都滿足需求的情況下,用你最熟悉、最拿手的方式
今天的分享就到這里了,大家要好好學(xué)C++喲~
寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號(hào):C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
