日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

进程、线程相关知识点整理

發(fā)布時(shí)間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程、线程相关知识点整理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是進(jìn)程

進(jìn)程是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它可以申請(qǐng)和擁有系統(tǒng)資源,是一個(gè)動(dòng)態(tài)的概念,是一個(gè)活動(dòng)的實(shí)體。

進(jìn)程是一個(gè)“執(zhí)行中的程序”。程序是一個(gè)沒有生命的實(shí)體,只有處理器賦予程序生命時(shí),它才能成為一個(gè)活動(dòng)的實(shí)體,我們稱其為進(jìn)程。

進(jìn)程的三種基本狀態(tài)

a. 運(yùn)行狀態(tài):獲得CPU的進(jìn)程處于此狀態(tài),對(duì)應(yīng)的程序在CPU上運(yùn)行著

b. 阻塞狀態(tài):為了等待某個(gè)外部事件的發(fā)生(如等待I/O操作的完成,等待另一個(gè)進(jìn)程發(fā)來消息),暫時(shí)無法運(yùn)行。也稱為等待狀態(tài)

c. 就緒狀態(tài):具備了一切運(yùn)行需要的條件,由于其他進(jìn)程占用CPU而暫時(shí)無法運(yùn)行

進(jìn)程狀態(tài)轉(zhuǎn)換

a. 運(yùn)行狀態(tài) ===> 阻塞狀態(tài):例如正在運(yùn)行的進(jìn)程提出I/O請(qǐng)求,由運(yùn)行狀態(tài)轉(zhuǎn)化為阻塞狀態(tài)

b. 阻塞狀態(tài) ===> 就緒狀態(tài):例如I/O操作完成之后,由阻塞狀態(tài)轉(zhuǎn)化為就緒狀態(tài)

c. 就緒狀態(tài) ===> 運(yùn)行狀態(tài):例如就緒狀態(tài)的進(jìn)程被進(jìn)程調(diào)度程序選中,分配到CPU中運(yùn)行,由就緒狀態(tài)轉(zhuǎn)化為運(yùn)行狀態(tài)

d. 運(yùn)行狀態(tài) ===> 就緒狀態(tài):處于運(yùn)行狀態(tài)的進(jìn)程的時(shí)間片用完,不得不讓出CPU,由運(yùn)行狀態(tài)轉(zhuǎn)化為就緒狀態(tài)

???

進(jìn)程間通信主要包括

?

管道( pipe ):管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系。

?

有名管道 (named pipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關(guān)系進(jìn)程間的通信。

?

信號(hào)量( semophore ) : 信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來控制多個(gè)進(jìn)程對(duì)共享資源的訪問。它常作為一種鎖機(jī)制,防止某進(jìn)程正在訪問共享資源時(shí),其他進(jìn)程也訪問該資源。因此,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。

?

消息隊(duì)列( message queue ) : 消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)。消息隊(duì)列克服了信號(hào)傳遞信息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。

?

信號(hào) ( sinal ) : 信號(hào)是一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生。

?

共享內(nèi)存( shared memory ) :共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問。共享內(nèi)存是最快的IPC方式,它是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。它往往與其他通信機(jī)制,如信號(hào)兩,配合使用,來實(shí)現(xiàn)進(jìn)程間的同步和通信。

?

套接字( socket ) : 套解口也是一種進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是,它可用于不同及其間的進(jìn)程通信。

?

注:?

全雙工指在發(fā)送數(shù)據(jù)的同時(shí)也能夠接收數(shù)據(jù),兩者同步進(jìn)行。目前的網(wǎng)卡一般都支持全雙工。

所謂半雙工就是指一個(gè)時(shí)間段內(nèi)只有一個(gè)動(dòng)作發(fā)生,早期的對(duì)講機(jī)、以及早期集線器等設(shè)備都是基于半雙工的產(chǎn)品。

?

什么是線程

線程有可能和其他線程共享一些資源,比如,內(nèi)存,文件,數(shù)據(jù)庫(kù)等。
當(dāng)多個(gè)線程同時(shí)讀寫同一份共享資源的時(shí)候,可能會(huì)引起沖突。這時(shí)候,我們需要引入線程“同步”機(jī)制,即各位線程之間要有個(gè)先來后到,不能一窩蜂擠上去搶作一團(tuán)。
線程同步的真實(shí)意思和字面意思恰好相反。線程同步的真實(shí)意思,其實(shí)是“排隊(duì)”:幾個(gè)線程之間要排隊(duì),一個(gè)一個(gè)對(duì)共享資源進(jìn)行操作,而不是同時(shí)進(jìn)行操作。

進(jìn)程,線程對(duì)比

把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位

線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.



線程同步的方法


(1)wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。
(2)sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。
(3)notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。
(4)notityAll ():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。

?

用戶級(jí)線程和內(nèi)核級(jí)線程

?

1?.內(nèi)核級(jí)線程:切換由內(nèi)核控制,當(dāng)線程進(jìn)行切換的時(shí)候,由用戶態(tài)轉(zhuǎn)化為內(nèi)核態(tài)。切換完畢要從內(nèi)核態(tài)返回用戶態(tài);可以很好的利用多核cpu。

2. 用戶級(jí)線程內(nèi)核的切換由用戶態(tài)程序自己控制內(nèi)核切換,不需要內(nèi)核干涉,少了進(jìn)出內(nèi)核態(tài)的消耗,但不能很好的利用多核Cpu。

?

以下是用戶級(jí)線程和內(nèi)核級(jí)線程的區(qū)別:

(1)內(nèi)核支持線程是OS內(nèi)核可感知的,而用戶級(jí)線程是OS內(nèi)核不可感知的。

(2)用戶級(jí)線程的創(chuàng)建、撤消和調(diào)度不需要OS內(nèi)核的支持,是在語言(如Java)這一級(jí)處理的;而內(nèi)核支持線程的創(chuàng)建、撤消和調(diào)度都需OS內(nèi)核提供支持,而且與進(jìn)程的創(chuàng)建、撤消和調(diào)度大體是相同的。

(3)用戶級(jí)線程執(zhí)行系統(tǒng)調(diào)用指令時(shí)將導(dǎo)致其所屬進(jìn)程被中斷,而內(nèi)核支持線程執(zhí)行系統(tǒng)調(diào)用指令時(shí),只導(dǎo)致該線程被中斷。

(4)在只有用戶級(jí)線程的系統(tǒng)內(nèi),CPU調(diào)度還是以進(jìn)程為單位,處于運(yùn)行狀態(tài)的進(jìn)程中的多個(gè)線程,由用戶程序控制線程的輪換運(yùn)行;在有內(nèi)核支持線程的系統(tǒng)內(nèi),CPU調(diào)度則以線程為單位,由OS的線程調(diào)度程序負(fù)責(zé)線程的調(diào)度。

(5)用戶級(jí)線程的程序?qū)嶓w是運(yùn)行在用戶態(tài)下的程序,而內(nèi)核支持線程的程序?qū)嶓w則是可以運(yùn)行在任何狀態(tài)下的程序。

內(nèi)核線程的優(yōu)點(diǎn):

(1)當(dāng)有多個(gè)處理機(jī)時(shí),一個(gè)進(jìn)程的多個(gè)線程可以同時(shí)執(zhí)行。

缺點(diǎn):

(1)由內(nèi)核進(jìn)行調(diào)度。

用戶線程的優(yōu)點(diǎn):

(1) 線程的調(diào)度不需要內(nèi)核直接參與,控制簡(jiǎn)單。

(2) 可以在不支持線程的操作系統(tǒng)中實(shí)現(xiàn)。

(3) 創(chuàng)建和銷毀線程、線程切換代價(jià)等線程管理的代價(jià)比內(nèi)核線程少得多。

(4)?允許每個(gè)進(jìn)程定制自己的調(diào)度算法,線程管理比較靈活。這就是必須自己寫管理程序,與內(nèi)核線程的區(qū)別

(5) 線程能夠利用的表空間和堆棧空間比內(nèi)核級(jí)線程多。

(6) 同一進(jìn)程中只能同時(shí)有一個(gè)線程在運(yùn)行,如果有一個(gè)線程使用了系統(tǒng)調(diào)用而阻塞,那么整個(gè)進(jìn)程都會(huì)被掛起。另外,頁(yè)面失效也會(huì)產(chǎn)生同樣的問題。

缺點(diǎn):

(1)資源調(diào)度按照進(jìn)程進(jìn)行,多個(gè)處理機(jī)下,同一個(gè)進(jìn)程中的線程只能在同一個(gè)處理機(jī)下分時(shí)復(fù)用

?

?

本貼是博主借鑒多個(gè)網(wǎng)站進(jìn)行的整理,由于過多不在此一一謝過。

?

?最后再給大家推薦兩個(gè)網(wǎng)站

?漫畫教你理解進(jìn)程線程

?我是一個(gè)線程

?

轉(zhuǎn)載于:https://www.cnblogs.com/CZDblog/p/5581073.html

總結(jié)

以上是生活随笔為你收集整理的进程、线程相关知识点整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。