溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

進程、程序、線程、多線程、并發(fā)、并行詳解

發(fā)布時間:2020-06-16 22:32:36 來源:網(wǎng)絡 閱讀:7361 作者:IT職場小白 欄目:開發(fā)技術(shù)
        本人初入golang開發(fā)方向,目前剛?cè)腴T。在代碼開發(fā)過程中,需要提前了解一下進程、線程、多線程、并發(fā)、并行等專業(yè)知識的概念。


        首先,并行與并發(fā)都是程序多線程處理場景,因此,一旦提到并行與并發(fā),那首先想到的是多線程。


        那么說到多線程,首先要了解一下什么是進程,什么是線程?


進程
        狹義理解就是操作系統(tǒng)中一段程序的執(zhí)行過程。那么廣義上,進程是指一個具有一定獨立功能的程序操作系統(tǒng)中關(guān)于某個數(shù)據(jù)集合進行的一次運行活動。是操作系統(tǒng)程序動態(tài)執(zhí)行的基本單元。在傳統(tǒng)的操作系統(tǒng)中,進程既是一個操作系統(tǒng)的基本分配單元,也是操作系統(tǒng)的基本執(zhí)行單元。

      1、首先,進程是一個實體,每一個進程都有自己對應的系統(tǒng)分配的內(nèi)存地址,一般情況下,包括文本區(qū)域(text region)、數(shù)據(jù)區(qū)域(data region)和堆棧(stack region)。文本區(qū)域存儲處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲變量和進程執(zhí)行期間使用的動態(tài)分配的內(nèi)存;堆棧區(qū)域存儲著活動過程調(diào)用的指令和本地變量;

     2、進程可以理解為一個正在執(zhí)行的程序,程序是一個靜態(tài)的沒有生命體征的實體,而經(jīng)過操作系統(tǒng)處理對其賦予生命時(即調(diào)用程序執(zhí)行操作),這個程序才可以變?yōu)橐粋€活動的、有生命體征的實體,即進程。

     3、進程共有三種狀態(tài):就緒、阻塞和運行。

        (1)、就緒態(tài):就緒狀態(tài)是指程序已達到可以運行的狀態(tài),只等CPU分配資源就可以運行的狀態(tài)。

        (2)、阻塞態(tài):當程序運行條件沒有滿足時,需要等待條件滿足時候才能執(zhí)行時所處的狀態(tài),如等待i/o操作時候,此刻的狀態(tài)就叫阻塞態(tài)。

        (3)、運行態(tài):進程占用CPU,并在CPU上運行。即程序正在運行時所處的狀態(tài)。

        

        進程狀態(tài)轉(zhuǎn)換在此處不在贅述,請看下一篇文章。


程序

    程序是指系統(tǒng)指令和數(shù)據(jù)的有序集合,是一個靜態(tài)的實體,不存在運行狀態(tài)的概念。

    進程與程序的概念:

    1、進程是程序運行所處的狀態(tài)實體名稱,是一個動態(tài)概念。

    2、進程包含程序,進程的執(zhí)行離不開程序,二進程的文本區(qū)域就是代碼區(qū),即程序存儲的區(qū)域。


線程

    線程是進程中執(zhí)行運算的最小單元,是操作系統(tǒng)執(zhí)行處理機制的基本單位。每個進程至少有一個線程,線程可以利用進程所擁有的資源執(zhí)行調(diào)度和運算。

      在引入線程的操作系統(tǒng)中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調(diào)度的基本單位,線程可以在一個進程中進行切換,占用資源開銷小,能更高效的提高系統(tǒng)多個程序間并發(fā)執(zhí)行的程度。

      線程既可以有操作系統(tǒng)內(nèi)核控制調(diào)度,也可以由用戶程序控制調(diào)度。


進程與線程的對比

    1、進程是操作系統(tǒng)資源分配的基本單位,所有與該進程有關(guān)的資源,均會被記錄在進程控制塊PCB中,以表示該進程所擁有的資源。同一進程下的所有線程共享該進程下的所有資源。

    2、線程是分配處理機的基本單位,與系統(tǒng)資源分配無關(guān)。事實上,正在在處理機上運行的是線程,并非進程。

    3、一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。

    4、線程在執(zhí)行的時候需要協(xié)作同步,不同進程的線程間要利用消息通信方法實現(xiàn)同步。


進程與線程的關(guān)系

進程、程序、線程、多線程、并發(fā)、并行詳解

    1、進程將CPU資源分給線程,即真正在CPU上運行的是線程。

    2、操作資源分配給進程,同一進程的所有線程共享該進程的所有資源。


多進程

    在同一個時間里,同一個計算機系統(tǒng)中如果允許兩個或兩個以上的進程處于運行狀態(tài),這便是多任務(多進程)?,F(xiàn)代的操作系統(tǒng)幾乎都是多進程操作系統(tǒng),能夠同時管理多個進程的運行。 多進程帶來的好處是明顯的。但是多進程對于系統(tǒng)的資源要求甚高,資源浪費也比較嚴重。應用多進程場景最多的是windows系統(tǒng),例如同時打開運行軟件,每個軟件打開相當于運行一個進程。


多線程

   在一段完整的代碼中,往往會有需要獨立的代碼模塊,而這些獨立運行的程序片段叫作“線程”(Thread),利用多個線程編程的概念就叫作多線程處理(多線程編程),多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統(tǒng)的效率。多線程是在程序在同一時間需要完成多項任務的時候?qū)崿F(xiàn)的。多線程的目的僅僅是為了提高資源利用效率。各個線程執(zhí)行自己的任務,這些線程可以”同時進行“。同時進行并非同一時刻進行,而是在某一時間段內(nèi),完成所有任務,任務的運行有先后順序。


并發(fā)

    進程、程序、線程、多線程、并發(fā)、并行詳解

     并發(fā)的實質(zhì)是一個物理CPU(也可以多個物理CPU) 在若干道程序(或線程)之間多路復用,并發(fā)性是對有限物理資源強制行使多用戶共享以提高效率。

     微觀角度:所有的并發(fā)處理都有排隊等候,喚醒,執(zhí)行等這樣的步驟,在微觀上他們都是序列被處理的,如果是同一時刻到達的請求(或線程)也會根據(jù)優(yōu)先級的不同,而先后進入隊列排隊等候執(zhí)行。

     宏觀角度:多個幾乎同時到達的請求(或線程)在宏觀上看就像是同時在被處理。

    并發(fā)就是只有一個CPU資源,程序(或線程)之間要競爭得到執(zhí)行機會。圖中的第一個階段,在A執(zhí)行的過程中B,C不會執(zhí)行,因為這段時間內(nèi)這個CPU資源被A競爭到了,同理,第二個階段只有B在執(zhí)行,第三個階段只有C在執(zhí)行。其實,并發(fā)過程中,A,B,C并不是同時在進行的(微觀角度)。但又是同時進行的(宏觀角度)。


并行

    進程、程序、線程、多線程、并發(fā)、并行詳解

    并行指兩個或兩個以上事件(或線程)在同一時刻發(fā)生,是真正意義上的不同事件或線程在同一時刻,在不同CPU資源上(多核),同時執(zhí)行。

    并行,不存在像并發(fā)那樣競爭CPU資源,等待執(zhí)行的概念,因為并行狀態(tài)下的線程分布在不同的CPU上。

    圖中,A,B,C都在同時運行(微觀,宏觀)。


通過多線程實現(xiàn)并發(fā),并行

    1、在CPU比較繁忙,資源不足的時候(開啟了很多進程),操作系統(tǒng)只為一個含有多線程的進程分配僅有的CPU資源,這些線程就會為自己盡量多搶時間片,這就是通過多線程實現(xiàn)并發(fā),線程之間會競爭CPU資源爭取執(zhí)行機會。

   2、 在CPU資源比較充足的時候,一個進程內(nèi)的多線程,可以被分配到不同的CPU資源,這就是通過多線程實現(xiàn)并行。

   3、至于多線程實現(xiàn)的是并發(fā)還是并行?上面所說,所寫多線程可能被分配到一個CPU內(nèi)核中執(zhí)行,也可能被分配到不同CPU執(zhí)行,分配過程是操作系統(tǒng)所為,不可人為控制。所有,如果有人問我我所寫的多線程是并發(fā)還是并行的?我會說,都有可能。

   4、不管并發(fā)還是并行,都提高了程序?qū)PU資源的利用率,最大限度地利用CPU資源。






向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI