什么是并發(fā)(concurrency)
當(dāng)你在餐廳品味美食的時(shí)候,電話鈴聲突然騷然了你美好的心情。此時(shí)有以下選擇。
A. 如果心情郁悶,沒接電話,繼續(xù)吃飯。此時(shí)的你就不支持并發(fā)。
B. 如果是美女打過來的電話,立馬接通吃飯,跟美女暢談一番,談好約會(huì)日期掛掉電話,哼著小曲繼續(xù)吃完剩下的美食。此時(shí)的你就支持并發(fā)。兩件事情都沒有耽誤。
C. 如果是同事打來的電話, 接通電話后一遍回答同事的問題咨詢,一遍繼續(xù)咀嚼著送入口中的美食。 恭喜你,此時(shí)你已經(jīng)達(dá)到了并發(fā)更高的境界:并行能力(parallelism)。
所以如果具有B和C的能力的人或者物,是具有并發(fā)能力的。并行技術(shù)可以看作是并發(fā)的一個(gè)至高境界,就像你已經(jīng)練成了乾坤大挪移的第七層。他們的關(guān)系如下圖所示。
并發(fā)與并行的主要區(qū)別是否在“同時(shí)”。 并發(fā)是你在做某件事情的時(shí)候,可以暫停處理當(dāng)前事情來處理某件新的事情,完成后再繼續(xù)處理之前的事情,由于來回切換速度很快,在用戶看來接近是同時(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)程或者線程打交道。 比如打開一個(gè)瀏覽器上網(wǎng), 同時(shí)為了增加情調(diào)又打開播放器聽一些輕音樂。 這每打開一個(gè)程序就會(huì)啟動(dòng)一個(gè)進(jìn)程,甚至一個(gè)瀏覽器進(jìn)程中還會(huì)啟動(dòng)一些線程或者子進(jìn)程來處理其中的視頻,搜索等業(yè)務(wù)。所以說當(dāng)你打開電腦的一瞬間,你已經(jīng)開始使用進(jìn)程和線程了。 每個(gè)進(jìn)程和線程都在做自己的事情,讓你感覺你可以使用電腦同時(shí)并發(fā)做很多事情,多么美妙的事情啊。
那么進(jìn)程和線程的關(guān)系可以用下圖來說明。
操作系統(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í)行。 如打開一個(gè)音樂播放器,同時(shí)打開一個(gè)瀏覽器查詢資料。 然而線程可以實(shí)現(xiàn)一個(gè)進(jìn)程內(nèi)的并發(fā)執(zhí)行。比如一個(gè)線程用于音樂播放器的界面的呈現(xiàn),另一個(gè)線程用于播放音樂。 正是進(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)程,完成去超市購物的任務(wù),然后分配一個(gè)購物車就是一個(gè)存儲(chǔ)空間。 此購物車僅用于你自己使用,不認(rèn)識(shí)的人是不能共享使用的。 因此進(jìn)程之間是不能夠共享內(nèi)存空間(Memory)的。 除非是通過類似IPC等高級(jí)技術(shù)來共享內(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ù)。比如你為了更快的購物,帶了你女朋友去購物,這就相當(dāng)于你創(chuàng)建了一個(gè)線程-女朋友來幫你購物。 女朋友當(dāng)然可以使用你的購物車,這就是共享了內(nèi)存空間。如下圖所示。
如果所有任務(wù)都使用線程來完成, 整個(gè)系統(tǒng)資源會(huì)被數(shù)以千計(jì)的進(jìn)程耗光,因?yàn)槊繂?dòng)一個(gè)進(jìn)程都會(huì)分配內(nèi)存空間。當(dāng)然超時(shí)的購物車也會(huì)被用完了。
因此大部分情況跟下需要在進(jìn)程內(nèi)使用線程來實(shí)現(xiàn)不同任務(wù)的并發(fā)處理。 你可以多找?guī)讉€(gè)朋友來幫你購物,又不耗費(fèi)更多的購物車。
線程能實(shí)現(xiàn)更細(xì)粒度的并發(fā)
線程可以由操作系統(tǒng)在內(nèi)核中創(chuàng)建,也可以在用戶程序中創(chuàng)建。 從操作系統(tǒng)中申請(qǐ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)一個(gè)任務(wù)來臨的時(shí)候,進(jìn)程向操作系統(tǒng)申請(qǐng)一個(gè)線程來處理這個(gè)任務(wù)。
舉個(gè)有趣例子解釋下下,系統(tǒng)啟動(dòng)了一個(gè)“做飯”的進(jìn)程, 并申請(qǐng)了一個(gè)廚房作為內(nèi)存空間。 進(jìn)程又申請(qǐng)了兩個(gè)廚師線程來做飯。 廚師A負(fù)責(zé)炒菜做飯。廚師B負(fù)責(zé)洗菜,切菜,準(zhǔn)備食材。 廚師B準(zhǔn)備好食材,廚師A就開始做飯,兩個(gè)線程分別完成自己的事情,實(shí)現(xiàn)并發(fā),如圖A。
在某一個(gè)時(shí)刻,可能會(huì)出現(xiàn)以下兩個(gè)問題。
a) 如果廚師A做飯速度很快,在某一個(gè)時(shí)刻廚師B沒有準(zhǔn)備好食材。 那廚師A只能等待廚師B準(zhǔn)備好才能繼續(xù),此時(shí)廚師A一直在等待。
b) 由于對(duì)廚師A沒有支配權(quán)所有無法臨時(shí)讓他去幫助準(zhǔn)備食材。
c) 此時(shí)可能考慮到增加效率,需要再招聘一個(gè)廚師C線程進(jìn)行準(zhǔn)備食材。 這就增加了支出成本。
下面介紹的綠色線程即將解決這些問題。
綠色線程
“綠色線程”這個(gè)名稱是指Sun Microsystem的綠色團(tuán)隊(duì),他們?cè)?0年代設(shè)計(jì)了最初的Java線程庫。但是其他一些編程語言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, 這樣就減少了開銷。
并發(fā)對(duì)云平臺(tái)意義重大
一個(gè)穩(wěn)定可靠的云平臺(tái),需要有較高的及時(shí)響應(yīng)和處理能力。 所以并發(fā)能力是衡量云平臺(tái)能力的重要指標(biāo)。當(dāng)前國(guó)內(nèi)的有華為云,阿里云,騰信云等;國(guó)外有亞馬遜, 微軟等云提供商, 都支持了不同程度的并發(fā)能力來解決越來越多的業(yè)務(wù)處理。 作為國(guó)內(nèi)重要的云供應(yīng)商,烽火通信從2010年就在云計(jì)算重點(diǎn)布局,早已基于開源OpenStack平臺(tái)架構(gòu)推出了FitOS云平臺(tái),具有如下特點(diǎn)。
1. 基于開源CentOS操作系統(tǒng)的多核處理技術(shù),能夠?qū)崿F(xiàn)高并發(fā)和并行的處理能力。
2. 不同模塊使用不同進(jìn)程處理任務(wù),每個(gè)模塊都使用線程和綠色線程來實(shí)現(xiàn)更細(xì)粒度的并發(fā)處理能力,極大的提高了響應(yīng)效率和系統(tǒng)的可伸縮能力。
3. 加入線程同步和進(jìn)程僵死檢測(cè)機(jī)制,讓系統(tǒng)更可靠更性能。
經(jīng)過多年的研發(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)。
- 螞蟻數(shù)科海外布局再提速:香港總部落戶,全球化新篇章開啟
- 高鐵新規(guī):毛孩子也能坐高鐵,12306推出“寵物托運(yùn)”功能,讓寵物出行更便捷
- 泰爾文特研發(fā)中心獲北京市外資研發(fā)中心認(rèn)證,創(chuàng)新實(shí)力獲認(rèn)可
- 亞馬遜云科技新工具:告別繁瑣,AI開發(fā)環(huán)境一鍵搞定
- 2025款小鵬X9震撼登場(chǎng):顛覆零重力座椅體驗(yàn),售價(jià)39.98萬元起,別錯(cuò)過!
- AI編程大勢(shì)所趨:半年內(nèi)90%,一年內(nèi)幾乎全部代碼由AI編寫
- iPhone 17系列機(jī)模意外曝光,小米SU7 Pro交付時(shí)間嚇壞用戶
- 福耀科技大學(xué)獲批,曹德旺回應(yīng):壓力山大,批下來就要做好,求真務(wù)實(shí)才是關(guān)鍵
- 特斯拉Cybertruck新功能:FSD大更新,輕松實(shí)現(xiàn)停車啟動(dòng)、智能召喚與倒車,駕駛更智能!
- 大眾汽車裁員風(fēng)暴來襲:軟件部門Cariad大刀揮向三成崗位,風(fēng)雨飄搖中的裁員序幕?
免責(zé)聲明:本網(wǎng)站內(nè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)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。