有一家游樂園,它叫Program

本文是在看了阮一峰先生的《進程與線程的一個簡單解釋》之后按照個人理解寫的一篇關于闡述程序、進程和線程關系的故事Demo,在內容上不是很嚴謹,請多包涵。

在某個不知名郊區,一個叫程序員的大富翁買下了一大片土地,建造了一座很大很大的游樂園,給它起了個名字:Program。

這里寫圖片描述

游樂園(Program)很大很大,有很多很多個游樂項目,每個游樂項目都有很多個工作人員在參與工作

這里寫圖片描述

程先生自己負責統計游樂園(Program)的營收。他在想,有一些游樂項目并不常年使用,比如清涼游泳池,是只在夏天開放的,比如某些節日專屬的游樂項目,如果在計算成本的時候要總是把這些不運營的項目也統計起來就太麻煩了,于是聰明的程先生想到了一個萬全的解決方案。他拍手道:“對??!我可以把當天運營的項目和當天不運營的項目分開來??!這樣我只要統計當天運營的項目的成本就行啦!”他覺得自己這個想法巧妙極了,于是乎決定給當天投入運營的項目起一個轟轟烈烈的名字,他反復翻閱了維科英漢漢英詞典,最后發現Process這個單詞看起來了不起極了,從此游樂園(Program)里的運營項目就有了一個新名字:Process。

這里寫圖片描述

于是乎Process和Program的概念就清晰了,Program就是游樂園本身,它包含了游樂園所有的游樂項目,它是一個靜態的概念。而Process是被投入運營的游樂項目,是動態的。游樂園里某一個游樂項目從早上8點開始投入運營,到晚上9點結束運營,為一個Process。9點過后游樂項目停止運營了便不能算一個Process了。也就是說Process是Program的一次執行,寫進硬盤里的程序自然是靜態的,通過啟動程序調動里面的進程,此時的進程是動態的,可以被Start,也可以被Destroy。**

這里寫圖片描述

每個運營項目(Process)都是獨立的,各自占有一片地方,每個運營項目(Process)也有好多好多工人(Thread),有負責維護運營這個游樂設施的,有負責每天接待客人的??墒菫槭裁闯滔壬埬敲炊嗟墓と四??像維護游樂設施的,請一個維護全部的游樂設施不就行了嗎?當然每個人都會這么想,程先生也不是傻子,他請這么多員工的原因是:X國是個極度貧困落后的國家,在這里勞動力是極為廉價的,并且十分人性化,只有當勞動的時候才會向老板要求一點面包和金錢。也就是說,線程是進程的子單位,也是程序執行流的基本單位。線程有輕量級的優點,每次start僅僅向系統請求支持運行的一點點必不可少的資源。**

這里寫圖片描述

在這種貧窮落后的國家里當然不可能建立起高科技的游樂設施啦。因此這里的游樂設施可是遠近聞名的純人工的哦。像摩天輪這種小型的游樂項目比較簡單,只要一個工人(Thread)在下面不停地推動它轉圈;像旋轉魔盤也比較簡單,只要一個壯一點的工人(Thread)在魔盤下拉著繩子轉圈跑;像海盜船這樣的大項目就麻煩了,需要兩個工人(Thread)配合著從兩邊來回交替地拖拽海盜船。游樂園(Program)每天都沉浸在這樣的汗水和歡聲笑語中。

這里寫圖片描述

游樂園(Program)實在是太大了,為了方便管理,程先生開始把每個游樂項目當作一個獨立的單位,在每個游樂項目里有這個項目的工人們用的廁所,休息用的房間等等。富翁規定,每個工人(Thread)只能在自己的工作區域內活動,并享有這片區域的資源。即同一個進程里的線程共享著這個進程的資源。線程之間通信是不需要通過調用內核的。**

這里寫圖片描述

剛開始工人們住得并不舒服,因為當工人A進去廁所大便的時候工人B也跑了進來,拉了一坨屎在工人A的褲子上;當休息室睡滿了之后,工人B還大搖大擺地走進來,壓在工人A的身上睡了過去。后來工人A被工人B壓死了,程先生意識到問題的重要性,于是善良的程先生決定買一些鎖來供工人們使用。由于線程共用同一片內存空間,就會出現多個線程讀寫同一片內存空間這種問題。為了解決這個問題提出了鎖的概念。**

這里寫圖片描述

他給廁所加了一把鎖,然后跟工人們說道:”這把鎖是我花重金買來的,叫做Mutex(互斥鎖),以后你們要養成上廁所關門的好習慣,其他人如果看到廁所被鎖起來就說明里面有人,這時候千萬不要強行拆門,乖乖在門口等?!?/strong>

這里寫圖片描述

然后程先生指著掛在休息室門上的幾把鑰匙,說道:”這個可不一樣,這個叫Semaphore(信號量),以后你們誰進去休息了,就取一把鑰匙,當你看到門上的鑰匙被取光了,說明里面已經沒有位置啦。那你們就乖乖在門口等就好啦“

這里寫圖片描述

在程先生的整治下,游樂園(Program)越來越井然有序,也不再發生有人被大便活埋,或者睡覺的時候被莫名的壓死的事故了。

這里寫圖片描述

每天游樂項目運營起來的時候就有工人(Thread)加入工作,這些工人們都被人們所熟知,但其實在游樂園(Program)中,有一類人是不被人們知道的,他們被稱作Daemon。他們就像守護神一樣守護著這個游樂項目里的所有人,為他們提供便利。比如說,偷偷摸摸地撿一下垃圾啊,偷偷摸摸地遞一些資料啊什么的。這里闡述的是守護線程的概念。守護線程是特殊的線程,在后臺為其他線程提供資源等,如Java的垃圾回收機制。**

這里寫圖片描述

就這樣,程先生的游樂園(Program)每天都在欣欣向榮,在這片貧困落后的國度儼然是一處靚麗的風景線。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容