云平臺并發(fā)技術(shù)知多少

什么是并發(fā)(concurrency)

當(dāng)你在餐廳品味美食的時候,電話鈴聲突然騷然了你美好的心情。此時有以下選擇。

A. 如果心情郁悶,沒接電話,繼續(xù)吃飯。此時的你就不支持并發(fā)。

B. 如果是美女打過來的電話,立馬接通吃飯,跟美女暢談一番,談好約會日期掛掉電話,哼著小曲繼續(xù)吃完剩下的美食。此時的你就支持并發(fā)。兩件事情都沒有耽誤。

C. 如果是同事打來的電話, 接通電話后一遍回答同事的問題咨詢,一遍繼續(xù)咀嚼著送入口中的美食。 恭喜你,此時你已經(jīng)達(dá)到了并發(fā)更高的境界:并行能力(parallelism)。

所以如果具有B和C的能力的人或者物,是具有并發(fā)能力的。并行技術(shù)可以看作是并發(fā)的一個至高境界,就像你已經(jīng)練成了乾坤大挪移的第七層。他們的關(guān)系如下圖所示。

云平臺并發(fā)技術(shù)知多少

并發(fā)與并行的主要區(qū)別是否在“同時”。 并發(fā)是你在做某件事情的時候,可以暫停處理當(dāng)前事情來處理某件新的事情,完成后再繼續(xù)處理之前的事情,由于來回切換速度很快,在用戶看來接近是同時進(jìn)行的。 并行是兩個人同時在做兩件事情。只有多個核的系統(tǒng)才能實(shí)現(xiàn)并行,每個核做一件事情。如果單核的系統(tǒng),只能支持并發(fā)執(zhí)行。

作為一個云操作系統(tǒng)平臺,需要同一時間內(nèi)能夠處理數(shù)以千計的任務(wù)量,那是怎么實(shí)現(xiàn)的? 那就依賴于進(jìn)程,線程,綠色線程等技術(shù)。

什么是進(jìn)程和線程

如果使用電腦辦公的話,大家每天都在與進(jìn)程或者線程打交道。 比如打開一個瀏覽器上網(wǎng), 同時為了增加情調(diào)又打開播放器聽一些輕音樂。 這每打開一個程序就會啟動一個進(jìn)程,甚至一個瀏覽器進(jìn)程中還會啟動一些線程或者子進(jìn)程來處理其中的視頻,搜索等業(yè)務(wù)。所以說當(dāng)你打開電腦的一瞬間,你已經(jīng)開始使用進(jìn)程和線程了。 每個進(jìn)程和線程都在做自己的事情,讓你感覺你可以使用電腦同時并發(fā)做很多事情,多么美妙的事情啊。

那么進(jìn)程和線程的關(guān)系可以用下圖來說明。

云平臺并發(fā)技術(shù)知多少

操作系統(tǒng)可以看成是一個包含多個進(jìn)程的容器,其中每個進(jìn)程都是包含多個線程的容器。所以在操作系統(tǒng)中,進(jìn)程可以在一個操作系統(tǒng)內(nèi)實(shí)現(xiàn)多個任務(wù)的并發(fā)執(zhí)行。 如打開一個音樂播放器,同時打開一個瀏覽器查詢資料。 然而線程可以實(shí)現(xiàn)一個進(jìn)程內(nèi)的并發(fā)執(zhí)行。比如一個線程用于音樂播放器的界面的呈現(xiàn),另一個線程用于播放音樂。 正是進(jìn)程和線程的分工合作, 我們用戶能夠感受到并發(fā)的完成多件事情。

只有進(jìn)程就滿足了嗎

進(jìn)程和線程是有顯著的不同的。系統(tǒng)分配了進(jìn)程后, 會同時給進(jìn)程分配一個臨時的存儲空間(Memory)。 打個比方, 比如你是系統(tǒng)創(chuàng)建的一個進(jìn)程,完成去超市購物的任務(wù),然后分配一個購物車就是一個存儲空間。 此購物車僅用于你自己使用,不認(rèn)識的人是不能共享使用的。 因此進(jìn)程之間是不能夠共享內(nèi)存空間(Memory)的。 除非是通過類似IPC等高級技術(shù)來共享內(nèi)存空間。

與進(jìn)程不一樣的是,線程是進(jìn)程申請由系統(tǒng)創(chuàng)建的。一個進(jìn)程內(nèi)部可以創(chuàng)建多個線程,這些線程可以共享該進(jìn)程的內(nèi)存空間(Memory),這個線程之間就可以更快速的共享數(shù)據(jù)。比如你為了更快的購物,帶了你女朋友去購物,這就相當(dāng)于你創(chuàng)建了一個線程-女朋友來幫你購物。 女朋友當(dāng)然可以使用你的購物車,這就是共享了內(nèi)存空間。如下圖所示。

云平臺并發(fā)技術(shù)知多少

如果所有任務(wù)都使用線程來完成, 整個系統(tǒng)資源會被數(shù)以千計的進(jìn)程耗光,因?yàn)槊繂右粋€進(jìn)程都會分配內(nèi)存空間。當(dāng)然超時的購物車也會被用完了。

因此大部分情況跟下需要在進(jìn)程內(nèi)使用線程來實(shí)現(xiàn)不同任務(wù)的并發(fā)處理。 你可以多找?guī)讉€朋友來幫你購物,又不耗費(fèi)更多的購物車。

線程能實(shí)現(xiàn)更細(xì)粒度的并發(fā)

線程可以由操作系統(tǒng)在內(nèi)核中創(chuàng)建,也可以在用戶程序中創(chuàng)建。 從操作系統(tǒng)中申請的是原生線程(Native Thread),相當(dāng)于是租賃的房子,只能擁有使用權(quán),但是沒有該房屋的支配權(quán),不能隨意買賣。 在用戶程序創(chuàng)建的線程一般稱之為綠色線程(Green Thread),相當(dāng)于你自己買了套房子,可以使用,還可以擁有該房屋的支配權(quán),可以決定是否買賣。

原生線程

原生線程可以實(shí)現(xiàn)進(jìn)程內(nèi)部的并發(fā)處理。 每當(dāng)一個任務(wù)來臨的時候,進(jìn)程向操作系統(tǒng)申請一個線程來處理這個任務(wù)。

舉個有趣例子解釋下下,系統(tǒng)啟動了一個“做飯”的進(jìn)程, 并申請了一個廚房作為內(nèi)存空間。 進(jìn)程又申請了兩個廚師線程來做飯。 廚師A負(fù)責(zé)炒菜做飯。廚師B負(fù)責(zé)洗菜,切菜,準(zhǔn)備食材。 廚師B準(zhǔn)備好食材,廚師A就開始做飯,兩個線程分別完成自己的事情,實(shí)現(xiàn)并發(fā),如圖A。

云平臺并發(fā)技術(shù)知多少

在某一個時刻,可能會出現(xiàn)以下兩個問題。

a) 如果廚師A做飯速度很快,在某一個時刻廚師B沒有準(zhǔn)備好食材。 那廚師A只能等待廚師B準(zhǔn)備好才能繼續(xù),此時廚師A一直在等待。

b) 由于對廚師A沒有支配權(quán)所有無法臨時讓他去幫助準(zhǔn)備食材。

c) 此時可能考慮到增加效率,需要再招聘一個廚師C線程進(jìn)行準(zhǔn)備食材。 這就增加了支出成本。

下面介紹的綠色線程即將解決這些問題。

綠色線程

“綠色線程”這個名稱是指Sun Microsystem的綠色團(tuán)隊,他們在90年代設(shè)計了最初的Java線程庫。但是其他一些編程語言Go、Haskell,Rust或者Python等都實(shí)現(xiàn)了與綠色線程等價的功能。

綠色線程是相當(dāng)于是一個線程內(nèi)的模擬線程,并不是真正的線程。其關(guān)系可以用下圖表示。

云平臺并發(fā)技術(shù)知多少

接著上面的例子,綠色線程我們可以看作是一個“規(guī)劃”。如下圖所示。

云平臺并發(fā)技術(shù)知多少

a) 綠色線程不是操作系統(tǒng)創(chuàng)建的。 而是由有用戶程序創(chuàng)建的, 能夠由于絕對的支配權(quán)。 因此可以讓廚師A做飯也可以準(zhǔn)備食材。

b) 廚師A在等待期間可以切換到規(guī)劃2上面去,準(zhǔn)備食材。等準(zhǔn)備好食材, 又切換到規(guī)劃1上繼續(xù)做飯,這樣不斷切換可以做兩件。

c) 由于廚師A可以幫助廚師B準(zhǔn)備食材,所以可以不需要一個廚師C, 這樣就減少了開銷。

并發(fā)對云平臺意義重大

一個穩(wěn)定可靠的云平臺,需要有較高的及時響應(yīng)和處理能力。 所以并發(fā)能力是衡量云平臺能力的重要指標(biāo)。當(dāng)前國內(nèi)的有華為云,阿里云,騰信云等;國外有亞馬遜, 微軟等云提供商, 都支持了不同程度的并發(fā)能力來解決越來越多的業(yè)務(wù)處理。 作為國內(nèi)重要的云供應(yīng)商,烽火通信從2010年就在云計算重點(diǎn)布局,早已基于開源OpenStack平臺架構(gòu)推出了FitOS云平臺,具有如下特點(diǎn)。

1. 基于開源CentOS操作系統(tǒng)的多核處理技術(shù),能夠?qū)崿F(xiàn)高并發(fā)和并行的處理能力。

2. 不同模塊使用不同進(jìn)程處理任務(wù),每個模塊都使用線程和綠色線程來實(shí)現(xiàn)更細(xì)粒度的并發(fā)處理能力,極大的提高了響應(yīng)效率和系統(tǒng)的可伸縮能力。

3. 加入線程同步和進(jìn)程僵死檢測機(jī)制,讓系統(tǒng)更可靠更性能。

經(jīng)過多年的研發(fā)積淀和優(yōu)化,F(xiàn)itOS云平臺能夠滿足私有云,電信云等不同場景的業(yè)務(wù)需求。目前,烽火云產(chǎn)品已累計部署110+數(shù)據(jù)中心,管理7000+節(jié)點(diǎn),儲存容量逾600PB,提供客戶很好的體驗(yàn)。

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2020-01-08
云平臺并發(fā)技術(shù)知多少
什么是并發(fā)(concurrency)當(dāng)你在餐廳品味美食的時候,電話鈴聲突然騷然了你美好的心情。此時有以下選擇。A. 如果心情郁悶,沒接電話,繼續(xù)吃飯。

長按掃碼 閱讀全文