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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

什么是進程

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

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

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

a. 運行狀態(tài):獲得CPU的進程處于此狀態(tài),對應的程序在CPU上運行著

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

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

進程狀態(tài)轉換

a. 運行狀態(tài) ===> 阻塞狀態(tài):例如正在運行的進程提出I/O請求,由運行狀態(tài)轉化為阻塞狀態(tài)

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

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

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

???

進程間通信主要包括

?

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

?

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

?

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

?

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

?

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

?

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

?

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

?

注:?

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

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

?

什么是線程

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

進程,線程對比

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

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



線程同步的方法


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

?

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

?

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

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

?

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

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

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

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

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

(5)用戶級線程的程序實體是運行在用戶態(tài)下的程序,而內(nèi)核支持線程的程序實體則是可以運行在任何狀態(tài)下的程序。

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

(1)當有多個處理機時,一個進程的多個線程可以同時執(zhí)行。

缺點:

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

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

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

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

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

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

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

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

缺點:

(1)資源調(diào)度按照進程進行,多個處理機下,同一個進程中的線程只能在同一個處理機下分時復用

?

?

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

?

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

?漫畫教你理解進程線程

?我是一個線程

?

轉載于:https://www.cnblogs.com/CZDblog/p/5581073.html

總結

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

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