兩個(gè)程序悲催的進(jìn)化旅程
后記:用這個(gè)漫畫是想講述進(jìn)程、線程、協(xié)程這些基本概念的來(lái)龍去脈,為什么會(huì)出現(xiàn)這種技術(shù),解決了什么問(wèn)題。其實(shí)計(jì)算機(jī)發(fā)展到今天,本質(zhì)上沒(méi)什么變化,就是計(jì)算能力越來(lái)越快,存儲(chǔ)能力越來(lái)越大。
多進(jìn)程的出現(xiàn)一方面是因?yàn)槲覀円浞掷肅PU的能力,因?yàn)樗鼘?shí)在是太快了,比硬盤快幾百萬(wàn)倍,遇到硬盤操作的時(shí)候,堅(jiān)決不能讓它等著,在那里空轉(zhuǎn),一定要切換到另外的程序去。 另外一方面是人們需要電腦“同時(shí)”運(yùn)行多個(gè)程序:一邊上網(wǎng)一邊聽(tīng)歌。
線程的出現(xiàn)主要是為了提高響應(yīng)性,漫畫中舉了一個(gè)界面不能響應(yīng)的例子,同樣的問(wèn)題也會(huì)出現(xiàn)在服務(wù)器端,多個(gè)用戶請(qǐng)求發(fā)給了服務(wù)器,當(dāng)一個(gè)請(qǐng)求在等待IO操作的時(shí)候,其他請(qǐng)求可以用別的線程來(lái)處理。但是線程多了,創(chuàng)建的開(kāi)銷、切換的開(kāi)銷也會(huì)很大,所以考慮得考慮復(fù)用,形成線程池。
協(xié)程通過(guò)合作式調(diào)度,避免了多線程編程中各個(gè)各樣煩人的、容易出錯(cuò)的問(wèn)題:加鎖,通知,阻塞。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】