程序 進程 線程 協(xié)成,你們真的了解嗎诅蝶?

一.進程:

程序并不能單獨運行退个,只有將程序裝載到內(nèi)存中,系統(tǒng)為它分配資源才能運行调炬,而這種執(zhí)行的程序就稱之為進程语盈。

程序和進程的區(qū)別就在于:程序是指令的集合,它是進程運行的靜態(tài)描述文本缰泡;進程是程序的一次執(zhí)行活動刀荒,屬于動態(tài)概念。

在多種編程中棘钞,我們允許多個同時加載到內(nèi)存中缠借,在操作系統(tǒng)的調(diào)度下,可以實現(xiàn)并發(fā)地執(zhí)行宜猜。這是這樣的設(shè)計泼返,大大提高了CPU的利用率。進程的出現(xiàn)讓每個用戶感覺到自己獨享CPU姨拥,因此绅喉,進程就是為了在CPU上實現(xiàn)多道編程而提出的

有了進程為什么還要線程?

進程有很多優(yōu)點垫毙,它提供了多種編程霹疫,讓我們感覺我們每個人都擁有自己的CPU和其他資源,可以提高計算機的利用率综芥。很多人就不理解了丽蝎,既然進程這么優(yōu)秀,為什么還要線程呢膀藐?其實屠阻,仔細觀察就會發(fā)現(xiàn)進程還是有很多缺陷的,主要體現(xiàn)在兩點上:

1.進程只能在一個時間干一件事额各,如果想同時干兩件事或多件事国觉,進程就無能為力了。

2.進程在執(zhí)行的過程中如果阻塞,例如等待輸入,整個進程就會掛起,即使進程中有些工作不依賴于輸入的數(shù)據(jù),也將無法執(zhí)行虾啦。

例如麻诀,我們在使用qq聊天痕寓, qq做為一個獨立進程如果同一時間只能干一件事,那他如何實現(xiàn)在同一時刻 即能監(jiān)聽鍵盤輸入蝇闭、又能監(jiān)聽其它人給你發(fā)的消息呻率、同時還能把別人發(fā)的消息顯示在屏幕上呢?你會說呻引,操作系統(tǒng)不是有分時么礼仗?但分時是指在不同進程間的分時呀, 即操作系統(tǒng)處理一會你的qq任務(wù)逻悠,又切換到word文檔任務(wù)上了元践,每個cpu時間片分給你的qq程序時,你的qq還是只能同時干一件事呀童谒。

再直白一點单旁, 一個操作系統(tǒng)就像是一個工廠,工廠里面有很多個生產(chǎn)車間惠啄,不同的車間生產(chǎn)不同的產(chǎn)品慎恒,每個車間就相當(dāng)于一個進程任内,且你的工廠又窮撵渡,供電不足,同一時間只能給一個車間供電死嗦,為了能讓所有車間都能同時生產(chǎn)趋距,你的工廠的電工只能給不同的車間分時供電,但是輪到你的qq車間時越除,發(fā)現(xiàn)只有一個干活的工人节腐,結(jié)果生產(chǎn)效率極低,為了解決這個問題摘盆,應(yīng)該怎么辦呢翼雀?。孩擂。狼渊。。沒錯类垦,你肯定想到了狈邑,就是多加幾個工人,讓幾個人工人并行工作蚤认,這每個工人米苹,就是線程!

二.線程:

線程是操作系統(tǒng)能夠進行運算調(diào)度的最小單位砰琢。它被包含在進程之中蘸嘶,是進程中的實際運作單位良瞧。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程训唱,每條線程并行執(zhí)行不同的任務(wù)

三.進程和線程的區(qū)別:

1.線程共享創(chuàng)建它的進程的地址空間莺褒;進程擁有它們自己的地址空間。

2.線程可以直接訪問其進程的數(shù)據(jù)段雪情;進程具有父進程的數(shù)據(jù)段的自身副本遵岩。

3.線程可以直接與其進程的其他線程通信;進程必須使用進程間通信來與兄弟進程通信巡通。

5.新線程容易創(chuàng)建尘执;新進程需要復(fù)制父進程。

6.線程可以對同一進程的線程執(zhí)行相當(dāng)大的控制宴凉;進程只能對子進程執(zhí)行控制誊锭。對主線程的更改(取消、優(yōu)先級更改等)可能會影響進程的其他線程的行為弥锄;對父進程的更改不影響子進程丧靡。

四.生產(chǎn)者消費者模型

在并發(fā)編程中使用生產(chǎn)者和消費者模式能夠解決絕大多數(shù)并發(fā)問題。該模式通過平衡生產(chǎn)線程和消費線程的工作能力來提高程序的整體處理數(shù)據(jù)的速度籽暇。

為什么要使用生產(chǎn)者和消費者模式

在線程世界里温治,生產(chǎn)者就是生產(chǎn)數(shù)據(jù)的線程,消費者就是消費數(shù)據(jù)的線程戒悠。在多線程開發(fā)當(dāng)中熬荆,如果生產(chǎn)者處理速度很快,而消費者處理速度很慢绸狐,那么生產(chǎn)者就必須等待消費者處理完卤恳,才能繼續(xù)生產(chǎn)數(shù)據(jù)。同樣的道理寒矿,如果消費者的處理能力大于生產(chǎn)者突琳,那么消費者就必須等待生產(chǎn)者。為了解決這個問題于是引入了生產(chǎn)者和消費者模式符相。

什么是生產(chǎn)者消費者模式

生產(chǎn)者消費者模式是通過一個容器來解決生產(chǎn)者和消費者的強耦合問題拆融。生產(chǎn)者和消費者彼此之間不直接通訊,而通過阻塞隊列來進行通訊主巍,所以生產(chǎn)者生產(chǎn)完數(shù)據(jù)之后不用等待消費者處理冠息,直接扔給阻塞隊列,消費者不找生產(chǎn)者要數(shù)據(jù)孕索,而是直接從阻塞隊列里取逛艰,阻塞隊列就相當(dāng)于一個緩沖區(qū),平衡了生產(chǎn)者和消費者的處理能力搞旭。

五.協(xié)成:

1.協(xié)程散怖,又稱微線程菇绵,纖程。英文名Coroutine镇眷。一句話說明什么是協(xié)程:協(xié)程是一種用戶態(tài)的輕量級線程咬最。

2.協(xié)程擁有自己的寄存器上下文和棧。協(xié)程調(diào)度切換時欠动,將寄存器上下文和棧保存到其他地方永乌,在切回來的時候,恢復(fù)先前保存的寄存器上下文和棧具伍。因此:

協(xié)程能保留上一次調(diào)用時的狀態(tài)(即所有局部狀態(tài)的一個特定組合)翅雏,每次過程重入時,就相當(dāng)于進入上一次調(diào)用的狀態(tài)人芽,換種說法:進入上一次離開時所處邏輯流的位


3.協(xié)程的好處:

無需線程上下文切換的開銷

無需原子操作鎖定及同步的開銷

4."原子操作(atomic operation)是不需要synchronized"望几,所謂原子操作是指不會被線程調(diào)度機制打斷的操作;這種操作一旦開始萤厅,就一直運行到結(jié)束橄抹,中間不會有任何 context switch (切換到另一個線程)。原子操作可以是一個步驟惕味,也可以是多個操作步驟楼誓,但是其順序是不可以被打亂,或者切割掉只執(zhí)行部分赦拘。視作整體是原子性的核心慌随。

方便切換控制流,簡化編程模型

高并發(fā)+高擴展性+低成本:一個CPU支持上萬的協(xié)程都不是問題躺同。所以很適合用于高并發(fā)處理。

5.缺點:

1.無法利用多核資源:協(xié)程的本質(zhì)是個單線程,它不能同時將單個CPU 的多個核用上,協(xié)程需要和進程配合才能運行在多CPU上.當(dāng)然我們?nèi)粘K帉懙慕^大部分應(yīng)用都沒有這個必要丸逸,除非是cpu密集型應(yīng)用蹋艺。

2.進行阻塞(Blocking)操作(如IO時)會阻塞掉整個程序

摘錄:https://www.cnblogs.com/richardzgt/articles/7761172.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市黄刚,隨后出現(xiàn)的幾起案子捎谨,更是在濱河造成了極大的恐慌,老刑警劉巖憔维,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涛救,死亡現(xiàn)場離奇詭異,居然都是意外死亡业扒,警方通過查閱死者的電腦和手機检吆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來程储,“玉大人蹭沛,你說我怎么就攤上這事臂寝。” “怎么了摊灭?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵咆贬,是天一觀的道長。 經(jīng)常有香客問我帚呼,道長掏缎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任煤杀,我火速辦了婚禮御毅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怜珍。我一直安慰自己端蛆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布酥泛。 她就那樣靜靜地躺著今豆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柔袁。 梳的紋絲不亂的頭發(fā)上呆躲,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音捶索,去河邊找鬼插掂。 笑死,一個胖子當(dāng)著我的面吹牛腥例,可吹牛的內(nèi)容都是我干的辅甥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼燎竖,長吁一口氣:“原來是場噩夢啊……” “哼璃弄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起构回,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤夏块,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纤掸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脐供,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年借跪,在試婚紗的時候發(fā)現(xiàn)自己被綠了政己。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垦梆,死狀恐怖匹颤,靈堂內(nèi)的尸體忽然破棺而出仅孩,到底是詐尸還是另有隱情,我是刑警寧澤印蓖,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布辽慕,位于F島的核電站,受9級特大地震影響赦肃,放射性物質(zhì)發(fā)生泄漏溅蛉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一他宛、第九天 我趴在偏房一處隱蔽的房頂上張望船侧。 院中可真熱鬧,春花似錦厅各、人聲如沸镜撩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁梗。三九已至,卻和暖如春憔古,著一層夾襖步出監(jiān)牢的瞬間遮怜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工鸿市, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锯梁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓焰情,卻偏偏與公主長得像陌凳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烙样,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接:https://github.com/EasyKotlin 在常用的并發(fā)模型中冯遂,多進程、多線程谒获、分布式是...
    JackChen1024閱讀 10,729評論 3 23
  • 輕量級線程:協(xié)程 在常用的并發(fā)模型中批狱,多進程、多線程展东、分布式是最普遍的赔硫,不過近些年來逐漸有一些語言以first-c...
    Tenderness4閱讀 6,364評論 2 10
  • 一、進程和線程 進程 進程就是一個執(zhí)行中的程序?qū)嵗嗡啵總€進程都有自己獨立的一塊內(nèi)存空間爪膊,一個進程中可以有多個線程权悟。...
    阿敏其人閱讀 2,612評論 0 13
  • 很多年來,春節(jié)假期前的最后幾個工作日推盛,我都流連在辦公室峦阁,象一個餐廳老板遲遲不愿意打烊,收拾著一些零碎的物件耘成,等到同...
    植樹菌閱讀 781評論 0 1
  • 頭狼不容易瘪菌,請尊重您的老大H龌帷!师妙! 當(dāng)你自認為辛苦诵肛、艱難和甚至委屈時,請看看前面為你開路的那位默穴,當(dāng)你的老大在為你冒險...
    投資修行之路閱讀 816評論 0 0