java并發(fā)-線程和進(jìn)程

線程(Thread)和進(jìn)程(process)都是操作系統(tǒng)的基本概念,但是都很抽象凡资,我們不容易想清楚,最近閱讀了一些的文章谬运,下面記錄一下對(duì)其的理解隙赁。

一、基本概念(來自于wikipedia)

  • 進(jìn)程(process)
進(jìn)程(英語:process)梆暖,是指計(jì)算機(jī)中已運(yùn)行的程序伞访。進(jìn)程曾經(jīng)是分時(shí)系統(tǒng)的基本運(yùn)作單位。在面
向進(jìn)程設(shè)計(jì)的系統(tǒng)(如早期的UNIX轰驳,Linux 2.4及更早的版本)中厚掷,進(jìn)程是程序的基本執(zhí)行實(shí)體;在
面向線程設(shè)計(jì)的系統(tǒng)(如當(dāng)代多數(shù)操作系統(tǒng)级解、Linux 2.6及更新的版本)中冒黑,進(jìn)程本身不是基本運(yùn)行
單位,而是線程的容器勤哗。程序本身只是指令薛闪、數(shù)據(jù)及其組織形式的描述,進(jìn)程才是程序(那些指令和數(shù)
據(jù))的真正運(yùn)行實(shí)例俺陋。
  • 線程
線程(英語:thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位豁延。大部分情況下昙篙,它被包含在進(jìn)程之
中,是進(jìn)程中的實(shí)際運(yùn)作單位诱咏。一條線程指的是進(jìn)程中一個(gè)單一順序的控制流苔可,一個(gè)進(jìn)程中可以并發(fā)多
個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)袋狞。在Unix System V及SunOS中也被稱為輕量進(jìn)程
(lightweight processes)焚辅,但輕量進(jìn)程更多指內(nèi)核線程(kernel thread),而把用戶線程
(user thread)稱為線程,且線程是獨(dú)立調(diào)度和分配的基本單位苟鸯。

從上述的描寫中我們可以得到一個(gè)這樣的結(jié)論同蜻,一個(gè)操作系統(tǒng)可以有多個(gè)進(jìn)程,一個(gè)進(jìn)程中可以有多個(gè)線程早处,也就是說進(jìn)程其實(shí)是線程的容器湾蔓。

  • 線程和進(jìn)程的一個(gè)比較表格:
S.no Process Thread
1、 進(jìn)程是計(jì)算機(jī)正在運(yùn)行的程序; 線程是進(jìn)程的一部分砌梆,是調(diào)度的基本單位;
2默责、 需要更多的成本去創(chuàng)建,銷毀咸包,切換上下文桃序,通信; 需要更少的成本;
3、 消耗更多的計(jì)算機(jī)資源烂瘫; 消耗更少的計(jì)算機(jī)資源
4媒熊、 進(jìn)程間獨(dú)立; 線程間之間可以共享內(nèi)存
5坟比、 進(jìn)程有自己獨(dú)立的棧和地址空間泛释; 線程間有自己所屬的進(jìn)程管理塊,從中獲取棧和地址空間

但是還是很抽象温算,最近看了一篇文章,一個(gè)歪果人的博客用了一個(gè)比較生動(dòng)的例子闡述了線程和進(jìn)程之間的關(guān)系间影,覺得很有意思注竿,這里借用他的例子和自己的一些理解解釋一下。
原文??

二魂贬、比喻的修辭手法

  • 進(jìn)程比喻為一個(gè)房子巩割,獨(dú)幢小別墅,大體是下面的樣子付燥。


    image
  • 進(jìn)程:

多進(jìn)程就是我們所說的別墅區(qū)宣谈,房間占一塊地基,那么進(jìn)程就占一塊計(jì)算機(jī)資源键科,就是一個(gè)container闻丑,房子里有很多的房間漩怎,包含了很多的功能,廚房嗦嗡,廁所勋锤,臥室等等,這個(gè)就是計(jì)算機(jī)分配給進(jìn)程的資源侥祭,進(jìn)程和進(jìn)程之間了叁执,就是一個(gè)別墅區(qū)的兩棟小別墅,互相隔離矮冬,強(qiáng)行闖入是違法的谈宛,但是房子是一個(gè)被動(dòng)的對(duì)象,他在那里什么也干不了胎署,他只能被住吆录,被使用;

  • 線程:

既然進(jìn)程是線程的容器硝拧,那房子里面的人就是線程径筏,如果你單身就是單線程,如果你結(jié)婚生子就是多線程障陶,這個(gè)房子的住戶對(duì)于房子來說是從屬關(guān)系滋恬,我買了這棟房子,我就有權(quán)利使用這個(gè)房子的功能抱究,而且對(duì)于房子里的人是共享的恢氯,我們可以使用衛(wèi)生間,臥室鼓寺,陽臺(tái)等勋拟,這些區(qū)域我們叫共享內(nèi)存。

三妈候、名詞解釋

1敢靡、上下文
我們經(jīng)常聽見上下文和上下文切換這一類的詞語,我們?cè)趺蠢斫馍舷挛倪@個(gè)概念呢苦银?


image

我的理解上下文就是需要的環(huán)境啸胧,我們應(yīng)該玩過此類的游戲,一個(gè)賬號(hào)有很多個(gè)角色幔虏,一個(gè)法師是46級(jí)纺念,一個(gè)戰(zhàn)士是100級(jí),如果你選擇了法師想括,對(duì)應(yīng)法師的裝備坐騎和一些通關(guān)的信息就是這個(gè)角色的上下文陷谱,如果你玩了一會(huì)法師,突然想玩戰(zhàn)士瑟蜈,你就需要切換到戰(zhàn)士視角烟逊,這種切換就可以理解為上下文的切換吧渣窜,不知道這個(gè)比喻是否合適。

進(jìn)程=運(yùn)行中的程序=程序代碼+代碼所出的上下文焙格,對(duì)應(yīng)上面的比喻图毕,這個(gè)角色就是程序代碼,代碼可以運(yùn)行眷唉,你也可以操作這個(gè)游戲人物走動(dòng)或者放出招式予颤,而這個(gè)游戲角色的裝備等級(jí)就是這個(gè)人物的上下文。

?那進(jìn)程和線程的上下文切換有什么區(qū)別冬阳?

  • 進(jìn)程:通過上面的比喻蛤虐,我們?nèi)绻枰袚Q角色,是整個(gè)游戲場(chǎng)景都要切換的肝陪,裝備坐騎等級(jí)驳庭,這些都會(huì)發(fā)生一個(gè)本質(zhì)的變化,虛擬空間也會(huì)變化氯窍,對(duì)比房子的比喻饲常,我們換了一個(gè)房子,對(duì)于cpu的緩存機(jī)制也會(huì)干擾狼讨,角色都換了贝淤,那以后保存的那些信息是不是一瞬間就作廢了。

  • 線程:線程切換上下文就可以理解為同一個(gè)游戲角色政供,只是切換了一個(gè)游戲模式播聪,比如刀戰(zhàn),我只需要帶上刀具布隔,魔法戰(zhàn)我只需要帶上魔杖离陶,空間還是一樣,房子還是同一個(gè)衅檀,這樣的消耗會(huì)少的多招刨。

四、線程和進(jìn)程的詳解

?為什么會(huì)出現(xiàn)并發(fā)哀军?

其實(shí)這就是我們壓榨CPU的一種手段沉眶,那么我們就需要了解一下CPU是如何工作的,帶著這個(gè)問題我查閱了一些資料排苍,知道了一個(gè)叫PC(program Counter)的東西,這里粘貼一下wikipedia的介紹:

程序計(jì)數(shù)器(英語:Program Counter学密,PC)是一個(gè)中央處理器中的寄存器淘衙,用于指示計(jì)算機(jī)在其
程序序列中的位置。在大部分的處理器中腻暮,指令指針都是在提取程序指令后就被立即增加彤守;也就是說
跳躍指令的目的地址毯侦,是由跳躍指令的操作數(shù)加上跳躍指令之后下一個(gè)指令的地址(單位為比特或字
節(jié),視電腦形態(tài)而定)來獲得目的地具垫。
  • CPU運(yùn)行程序的步驟我就可以簡(jiǎn)單的理解為3步

1侈离、pc指針指向一句代碼,然后開始算筝蚕;

2卦碾、算完以后,pc指針=當(dāng)前指針+1(假設(shè)沒有跳躍的方式)

3起宽、執(zhí)行下一段代碼洲胖,pc指針在移動(dòng);

但是CPU可以一直不休息坯沪,一直算算算嗎绿映?答案是不行,因?yàn)橛衖o操作腐晾,比如遇到一個(gè)打印語句叉弦,IO操作相比于cpu的計(jì)算操作是很慢慢的,就是一個(gè)是飛機(jī)一個(gè)是步行的對(duì)比吧藻糖,那cpu就需要等啊淹冰,等io操作完成以后,在進(jìn)行下面的操作颖御,但是我們要壓榨cpu啊榄棵,那可以不可以讓cpu在等待的期間,干其他的事呢潘拱,那就讓cpu干其他程序的計(jì)算工作疹鳄,讓他沒有休息的時(shí)間,交替的運(yùn)行不同的程序芦岂,這就是并發(fā)瘪弓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市禽最,隨后出現(xiàn)的幾起案子腺怯,更是在濱河造成了極大的恐慌,老刑警劉巖川无,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呛占,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡懦趋,警方通過查閱死者的電腦和手機(jī)晾虑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帜篇,你說我怎么就攤上這事糙捺。” “怎么了笙隙?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵洪灯,是天一觀的道長。 經(jīng)常有香客問我竟痰,道長签钩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任凯亮,我火速辦了婚禮边臼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘假消。我一直安慰自己柠并,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布富拗。 她就那樣靜靜地躺著臼予,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啃沪。 梳的紋絲不亂的頭發(fā)上粘拾,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音创千,去河邊找鬼缰雇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛追驴,可吹牛的內(nèi)容都是我干的械哟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼殿雪,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼暇咆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丙曙,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤爸业,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亏镰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扯旷,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年索抓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钧忽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片某抓。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惰瓜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汉矿,我是刑警寧澤崎坊,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站洲拇,受9級(jí)特大地震影響奈揍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赋续,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一男翰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纽乱,春花似錦蛾绎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薯嗤,卻和暖如春顽爹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骆姐。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國打工镜粤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玻褪。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓肉渴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親归园。 傳聞我的和親對(duì)象是個(gè)殘疾皇子黄虱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354