什么是并發(fā)(concurrency)
當(dāng)你在餐廳品味美食的時(shí)候,電話鈴聲突然騷然了你美好的心情。此時(shí)有以下選擇。
A. 如果心情郁悶,沒(méi)接電話,繼續(xù)吃飯。此時(shí)的你就不支持并發(fā)。
B. 如果是美女打過(guò)來(lái)的電話,立馬接通吃飯,跟美女暢談一番,談好約會(huì)日期掛掉電話,哼著小曲繼續(xù)吃完剩下的美食。此時(shí)的你就支持并發(fā)。兩件事情都沒(méi)有耽誤。
C. 如果是同事打來(lái)的電話, 接通電話后一遍回答同事的問(wèn)題咨詢,一遍繼續(xù)咀嚼著送入口中的美食。 恭喜你,此時(shí)你已經(jīng)達(dá)到了并發(fā)更高的境界:并行能力(parallelism)。
所以如果具有B和C的能力的人或者物,是具有并發(fā)能力的。并行技術(shù)可以看作是并發(fā)的一個(gè)至高境界,就像你已經(jīng)練成了乾坤大挪移的第七層。他們的關(guān)系如下圖所示。
并發(fā)與并行的主要區(qū)別是否在“同時(shí)”。 并發(fā)是你在做某件事情的時(shí)候,可以暫停處理當(dāng)前事情來(lái)處理某件新的事情,完成后再繼續(xù)處理之前的事情,由于來(lái)回切換速度很快,在用戶看來(lái)接近是同時(shí)進(jìn)行的。 并行是兩個(gè)人同時(shí)在做兩件事情。只有多個(gè)核的系統(tǒng)才能實(shí)現(xiàn)并行,每個(gè)核做一件事情。如果單核的系統(tǒng),只能支持并發(fā)執(zhí)行。
作為一個(gè)云操作系統(tǒng)平臺(tái),需要同一時(shí)間內(nèi)能夠處理數(shù)以千計(jì)的任務(wù)量,那是怎么實(shí)現(xiàn)的? 那就依賴于進(jìn)程,線程,綠色線程等技術(shù)。
什么是進(jìn)程和線程
如果使用電腦辦公的話,大家每天都在與進(jìn)程或者線程打交道。 比如打開(kāi)一個(gè)瀏覽器上網(wǎng), 同時(shí)為了增加情調(diào)又打開(kāi)播放器聽(tīng)一些輕音樂(lè)。 這每打開(kāi)一個(gè)程序就會(huì)啟動(dòng)一個(gè)進(jìn)程,甚至一個(gè)瀏覽器進(jìn)程中還會(huì)啟動(dòng)一些線程或者子進(jìn)程來(lái)處理其中的視頻,搜索等業(yè)務(wù)。所以說(shuō)當(dāng)你打開(kāi)電腦的一瞬間,你已經(jīng)開(kāi)始使用進(jìn)程和線程了。 每個(gè)進(jìn)程和線程都在做自己的事情,讓你感覺(jué)你可以使用電腦同時(shí)并發(fā)做很多事情,多么美妙的事情啊。
那么進(jìn)程和線程的關(guān)系可以用下圖來(lái)說(shuō)明。
操作系統(tǒng)可以看成是一個(gè)包含多個(gè)進(jìn)程的容器,其中每個(gè)進(jìn)程都是包含多個(gè)線程的容器。所以在操作系統(tǒng)中,進(jìn)程可以在一個(gè)操作系統(tǒng)內(nèi)實(shí)現(xiàn)多個(gè)任務(wù)的并發(fā)執(zhí)行。 如打開(kāi)一個(gè)音樂(lè)播放器,同時(shí)打開(kāi)一個(gè)瀏覽器查詢資料。 然而線程可以實(shí)現(xiàn)一個(gè)進(jìn)程內(nèi)的并發(fā)執(zhí)行。比如一個(gè)線程用于音樂(lè)播放器的界面的呈現(xiàn),另一個(gè)線程用于播放音樂(lè)。 正是進(jìn)程和線程的分工合作, 我們用戶能夠感受到并發(fā)的完成多件事情。
只有進(jìn)程就滿足了嗎
進(jìn)程和線程是有顯著的不同的。系統(tǒng)分配了進(jìn)程后, 會(huì)同時(shí)給進(jìn)程分配一個(gè)臨時(shí)的存儲(chǔ)空間(Memory)。 打個(gè)比方, 比如你是系統(tǒng)創(chuàng)建的一個(gè)進(jìn)程,完成去超市購(gòu)物的任務(wù),然后分配一個(gè)購(gòu)物車就是一個(gè)存儲(chǔ)空間。 此購(gòu)物車僅用于你自己使用,不認(rèn)識(shí)的人是不能共享使用的。 因此進(jìn)程之間是不能夠共享內(nèi)存空間(Memory)的。 除非是通過(guò)類似IPC等高級(jí)技術(shù)來(lái)共享內(nèi)存空間。
與進(jìn)程不一樣的是,線程是進(jìn)程申請(qǐng)由系統(tǒng)創(chuàng)建的。一個(gè)進(jìn)程內(nèi)部可以創(chuàng)建多個(gè)線程,這些線程可以共享該進(jìn)程的內(nèi)存空間(Memory),這個(gè)線程之間就可以更快速的共享數(shù)據(jù)。比如你為了更快的購(gòu)物,帶了你女朋友去購(gòu)物,這就相當(dāng)于你創(chuàng)建了一個(gè)線程-女朋友來(lái)幫你購(gòu)物。 女朋友當(dāng)然可以使用你的購(gòu)物車,這就是共享了內(nèi)存空間。如下圖所示。
如果所有任務(wù)都使用線程來(lái)完成, 整個(gè)系統(tǒng)資源會(huì)被數(shù)以千計(jì)的進(jìn)程耗光,因?yàn)槊繂?dòng)一個(gè)進(jìn)程都會(huì)分配內(nèi)存空間。當(dāng)然超時(shí)的購(gòu)物車也會(huì)被用完了。
因此大部分情況跟下需要在進(jìn)程內(nèi)使用線程來(lái)實(shí)現(xiàn)不同任務(wù)的并發(fā)處理。 你可以多找?guī)讉€(gè)朋友來(lái)幫你購(gòu)物,又不耗費(fèi)更多的購(gòu)物車。
線程能實(shí)現(xiàn)更細(xì)粒度的并發(fā)
線程可以由操作系統(tǒng)在內(nèi)核中創(chuàng)建,也可以在用戶程序中創(chuàng)建。 從操作系統(tǒng)中申請(qǐng)的是原生線程(Native Thread),相當(dāng)于是租賃的房子,只能擁有使用權(quán),但是沒(méi)有該房屋的支配權(quán),不能隨意買賣。 在用戶程序創(chuàng)建的線程一般稱之為綠色線程(Green Thread),相當(dāng)于你自己買了套房子,可以使用,還可以擁有該房屋的支配權(quán),可以決定是否買賣。
原生線程
原生線程可以實(shí)現(xiàn)進(jìn)程內(nèi)部的并發(fā)處理。 每當(dāng)一個(gè)任務(wù)來(lái)臨的時(shí)候,進(jìn)程向操作系統(tǒng)申請(qǐng)一個(gè)線程來(lái)處理這個(gè)任務(wù)。
舉個(gè)有趣例子解釋下下,系統(tǒng)啟動(dòng)了一個(gè)“做飯”的進(jìn)程, 并申請(qǐng)了一個(gè)廚房作為內(nèi)存空間。 進(jìn)程又申請(qǐng)了兩個(gè)廚師線程來(lái)做飯。 廚師A負(fù)責(zé)炒菜做飯。廚師B負(fù)責(zé)洗菜,切菜,準(zhǔn)備食材。 廚師B準(zhǔn)備好食材,廚師A就開(kāi)始做飯,兩個(gè)線程分別完成自己的事情,實(shí)現(xiàn)并發(fā),如圖A。
在某一個(gè)時(shí)刻,可能會(huì)出現(xiàn)以下兩個(gè)問(wèn)題。
a) 如果廚師A做飯速度很快,在某一個(gè)時(shí)刻廚師B沒(méi)有準(zhǔn)備好食材。 那廚師A只能等待廚師B準(zhǔn)備好才能繼續(xù),此時(shí)廚師A一直在等待。
b) 由于對(duì)廚師A沒(méi)有支配權(quán)所有無(wú)法臨時(shí)讓他去幫助準(zhǔn)備食材。
c) 此時(shí)可能考慮到增加效率,需要再招聘一個(gè)廚師C線程進(jìn)行準(zhǔn)備食材。 這就增加了支出成本。
下面介紹的綠色線程即將解決這些問(wèn)題。
綠色線程
“綠色線程”這個(gè)名稱是指Sun Microsystem的綠色團(tuán)隊(duì),他們?cè)?0年代設(shè)計(jì)了最初的Java線程庫(kù)。但是其他一些編程語(yǔ)言Go、Haskell,Rust或者Python等都實(shí)現(xiàn)了與綠色線程等價(jià)的功能。
綠色線程是相當(dāng)于是一個(gè)線程內(nèi)的模擬線程,并不是真正的線程。其關(guān)系可以用下圖表示。
接著上面的例子,綠色線程我們可以看作是一個(gè)“規(guī)劃”。如下圖所示。
a) 綠色線程不是操作系統(tǒng)創(chuàng)建的。 而是由有用戶程序創(chuàng)建的, 能夠由于絕對(duì)的支配權(quán)。 因此可以讓廚師A做飯也可以準(zhǔn)備食材。
b) 廚師A在等待期間可以切換到規(guī)劃2上面去,準(zhǔn)備食材。等準(zhǔn)備好食材, 又切換到規(guī)劃1上繼續(xù)做飯,這樣不斷切換可以做兩件。
c) 由于廚師A可以幫助廚師B準(zhǔn)備食材,所以可以不需要一個(gè)廚師C, 這樣就減少了開(kāi)銷。
并發(fā)對(duì)云平臺(tái)意義重大
一個(gè)穩(wěn)定可靠的云平臺(tái),需要有較高的及時(shí)響應(yīng)和處理能力。 所以并發(fā)能力是衡量云平臺(tái)能力的重要指標(biāo)。當(dāng)前國(guó)內(nèi)的有華為云,阿里云,騰信云等;國(guó)外有亞馬遜, 微軟等云提供商, 都支持了不同程度的并發(fā)能力來(lái)解決越來(lái)越多的業(yè)務(wù)處理。 作為國(guó)內(nèi)重要的云供應(yīng)商,烽火通信從2010年就在云計(jì)算重點(diǎn)布局,早已基于開(kāi)源OpenStack平臺(tái)架構(gòu)推出了FitOS云平臺(tái),具有如下特點(diǎn)。
1. 基于開(kāi)源CentOS操作系統(tǒng)的多核處理技術(shù),能夠?qū)崿F(xiàn)高并發(fā)和并行的處理能力。
2. 不同模塊使用不同進(jìn)程處理任務(wù),每個(gè)模塊都使用線程和綠色線程來(lái)實(shí)現(xiàn)更細(xì)粒度的并發(fā)處理能力,極大的提高了響應(yīng)效率和系統(tǒng)的可伸縮能力。
3. 加入線程同步和進(jìn)程僵死檢測(cè)機(jī)制,讓系統(tǒng)更可靠更性能。
經(jīng)過(guò)多年的研發(fā)積淀和優(yōu)化,F(xiàn)itOS云平臺(tái)能夠滿足私有云,電信云等不同場(chǎng)景的業(yè)務(wù)需求。目前,烽火云產(chǎn)品已累計(jì)部署110+數(shù)據(jù)中心,管理7000+節(jié)點(diǎn),儲(chǔ)存容量逾600PB,提供客戶很好的體驗(yàn)。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- 特斯拉Model Y改款搶先看:量產(chǎn)下月,阿里“甩賣”銀泰引關(guān)注
- 蘋(píng)果AI布局失策:Vision Pro中國(guó)表現(xiàn)不佳,2024大事盤(pán)點(diǎn)揭示未來(lái)挑戰(zhàn)
- 特斯拉電耗全球領(lǐng)先,小米CEO回應(yīng)追趕需時(shí):謙虛學(xué)習(xí),3-5年再追趕
- 小米15系列升級(jí)無(wú)網(wǎng)通話:6km通話不再遙遠(yuǎn),年底告別網(wǎng)絡(luò)束縛
- 谷歌新功能Gemini:一鍵總結(jié)PDF,高效閱讀新體驗(yàn)
- 德國(guó)大眾妥協(xié):不關(guān)廠裁員,新標(biāo)題“巨頭轉(zhuǎn)型困境下的權(quán)衡之計(jì)”
- 蘋(píng)果醞釀大變革:明年推7寸屏音箱,搭載A18芯片,顛覆智能家居新玩法
- 美國(guó)"芯"補(bǔ)貼政策新動(dòng)向:三星、德州儀器獲巨額補(bǔ)貼,本土芯片制造再迎重磅支持
- 小鵬總裁冬至送湯圓,暖心舉動(dòng)引熱議:科技大佬的鄰家日常
- 蔚來(lái)新品牌螢火蟲(chóng)首款車型低調(diào)亮相:售價(jià)親民,品質(zhì)如何成關(guān)注焦點(diǎn)
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。