摘要:進程與線程進程和線程是操作系統的基本概念但是它們比較抽象不容易掌握。線程,有時被稱為輕量進程,,是程序執行流的最小單元。
進程與線程
進程(process)和線程(thread)是操作系統的基本概念,但是它們比較抽象,不容易掌
握。
有一個很好的類比,可以把它們解釋地清晰易懂。
CPU計算機的核心是CPU,它承擔了所有的計算任務。它就像一座工廠,時刻在運行。
假定工廠的電力有限,一次只能供給一個車間使用。也就是說,一個車間開工的時候,其他車間都必須停工。背后的含義就是,單個CPU一次只能運行一個任務。
進程進程就好比工廠的車間,它代表CPU所能處理的單個任務。任一時刻,CPU總是運行一個進程,其他進程處于非運行狀態。
線程一個車間里,可以有很多工人。他們協同完成一個任務。
線程就好比車間里的工人。一個進程可以包括多個線程。
車間的空間是工人們共享的,比如許多房間是每個工人都可以進出的。這象征一個進程的內存空間是共享的,每個線程都可以使用這些共享內存。
可是,每間房間的大小不同,有些房間最多只能容納一個人,比如廁所。里面有人的時候,其他人就不能進去了。這代表一個線程使用某些共享內存時,其他線程必須等它結束,才能使用這一塊內存。
一個防止他人進入的簡單方法,就是門口加一把鎖。先到的人鎖上門,后到的人看到上鎖,就在門口排隊,等鎖打開再進去。這就叫"互斥鎖"(Mutual exclusion,縮寫 Mutex),防止多個線程同時讀寫某一塊內存區域。
還有些房間,可以同時容納n個人,比如廚房。也就是說,如果人數大于n,多出來的人只能在外面等著。這好比某些內存區域,只能供給固定數目的線程使用。
這時的解決方法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。后到的人發現鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做"信號量"(Semaphore),用來保證多個線程不會互相沖突。
進程與線程關系一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。
資源分配給進程,同一進程的所有線程共享該進程的所有資源。
CPU分給線程,即真正在CPU上運行的是線程。
專業總結進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。
線程,有時被稱為輕量進程(Lightweight Process,LWP),是程序執行流的最小單元。是被系統獨立調度和分派的基本單位。
多進程與多線程 多進程情景分析瀏覽器,網易云音樂以及pycharm 三個軟件只能順序執行是怎樣一種場景呢?本來在python編程時想要聽個古典音樂來點靈感, 結果發現,對于CPU來說, 一次只能執行一個程序, 太崩潰, 另外,假如有兩個程序A和B,程序A在執行到一半的過程中,需要讀取大量的數據輸入(I/O操作),而此時CPU只能靜靜地等待任務A讀取完數據才能繼續執行,這樣就白白浪費了CPU資源。你是不是已經想到在程序A讀取數據的過程中,讓程序B去執行,當程序A讀取完數據之后,讓程序B暫停。聰明,這當然沒問題,但這里有一個關鍵詞:切換。多線程情景分析
假設,一個文本程序,需要接受鍵盤輸入,將內容顯示在屏幕上,還需要保存信息到硬盤中。若只有一個進程,勢必造成同一時間只能干一樣事的尷尬(當保存時,就不能通過鍵盤輸入內容)。若有多個進程,每個進程負責一個任務,進程A負責接收鍵盤輸入的任務,進程B負責將內容顯示在屏幕上的任務,進程C負責保存內容到硬盤中的任務。這里進程A,B,C間的協作涉及到了進程通信問題,而且有共同都需要擁有的東西——-文本內容,不停的切換造成性能上的損失。若有一種機制,可以使任務A,B,C共享資源,這樣上下文切換所需要保存和恢復的內容就少了,同時又可以減少通信所帶來的性能損耗,那就好了。是的,這種機制就是線程。串行,并行和并發
串行處理是當一個程序執行結束, 下一個程序才可以繼續執行, 否則一直處于等待狀態.
并行處理(Parallel Processing)是計算機系統中能同時執行兩個或更多個處理的一種計算方法。并行處理可同時工作于同一程序的不同方面。并行處理的主要目的是節省大型和復雜問題的解決時間。
并發處理(concurrency Processing):指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機(CPU)上運行,但任一個時刻點上只有一個程序在處理機(CPU)上運行
并發的關鍵是你有處理多個任務的能力,不一定要同時。并行的關鍵是你有同時處理多個任務的能力(也就是多個CPU處理器)。所以說,并行是并發的子集.
同步與異步在計算機領域,同步就是指一個進程在執行某個請求的時候,若該請求需要一段時間才能返回信息,那么這個進程將會一直等待下去,直到收到返回信息才繼續執行下去;異步是指進程不需要一直等下去,而是繼續執行下面的操作,不管其他進程的狀態。當有消息返回時系統會通知進程進行處理,這樣可以提高執行的效率。舉個例子,打電話時就是同步通信,發短息時就是異步通信。總結
操作系統的設計,因此可以歸結為三點:
(1)以多進程形式,允許多個任務同時運行;
(2)以多線程形式,允許單個任務分成不同的部分運行;
(3)提供協調機制,一方面防止進程之間和線程之間產生沖突,另一方面允許進程之間和線程之間共享資源。
參考資料:
阮一峰的網絡日志之進程與線程的一個簡單解釋
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42344.html
摘要:線程線程,有時被稱為輕量級進程,,是程序執行流的最小單元。進程和線程區別進程是資源分配的基本單位。說得簡單點,下面這段代碼執行的時候參考博文進程與線程的一個簡單解釋多線程和多進程的區別小結多線程還是多進程的選擇及區別加鎖 關于進程與線程的簡單理解(以工廠舉例:cup-》工廠,車間-》進程,線程-》工人),可以參考阮一峰的博文進程與線程的一個簡單圖文解釋 先來了解下進程和線程的概念關于多...
摘要:父進程調用創建子進程。因而,一個進程的第一個線程會隨著這個進程的啟動而創建,這個線程被稱為該進程的主線程。另一方面,線程不可能獨立于進程存在。終止線程線程可以通過多種方式來終結同一個進程中的其他線程。 前言 不積跬步,無以至千里;不積小流,無以成江海。在學習Java多線程相關的知識前,我們首先需要去了解一點操作系統的進程、線程以及相關的基礎概念。 進程 通常,我們把一個程序的執行稱為一...
摘要:在一個進程內部,要同時干多件事,就需要同時運行多個子任務,我們把進程內的這些子任務稱為線程。總結一下,多任務的實現方式有三種多進程模式多線程模式多進程多線程模式線程是最小的執行單元,而進程由至少一個線程組成。 進程與線程 很多同學都聽說過,現代操作系統比如Mac OS X,UNIX,Linux,Windows等,都是支持多任務的操作系統。 什么叫多任務呢?簡單地說,就是操作系統可以同時...
閱讀 2381·2021-11-12 10:34
閱讀 1466·2019-08-29 16:15
閱讀 2678·2019-08-29 15:17
閱讀 1334·2019-08-23 17:09
閱讀 389·2019-08-23 11:37
閱讀 2451·2019-08-23 10:39
閱讀 468·2019-08-22 16:43
閱讀 3107·2019-08-22 14:53