版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、n 目的:目的:n 設計更靈活、性能更優(yōu)化的并發(fā)服務器。設計更靈活、性能更優(yōu)化的并發(fā)服務器。n 2.困難:困難:n 設計所依賴的條件在不斷變化,而我們只能設計所依賴的條件在不斷變化,而我們只能依依 靠經(jīng)驗來做出判斷。靠經(jīng)驗來做出判斷。服務器整個生命期中,同時并發(fā)的服務器整個生命期中,同時并發(fā)的最大線程數(shù)量。該參數(shù)某種意義上代表了最大線程數(shù)量。該參數(shù)某種意義上代表了該服務器的最大資源開銷。該服務器的最大資源開銷。n 我們可以限制服務器的最大并發(fā)數(shù)量,也我們可以限制服務器的最大并發(fā)數(shù)量,也可以不限制(允許創(chuàng)建任意多的線程),可以不限制(允許創(chuàng)建任意多的線程),此時該服務器的并發(fā)等級受限于操作系統(tǒng)此
2、時該服務器的并發(fā)等級受限于操作系統(tǒng)的限制。的限制。 當收到遠程連接請求時觸發(fā)線程創(chuàng)建,此當收到遠程連接請求時觸發(fā)線程創(chuàng)建,此時服務器的并發(fā)等級依賴于客戶的需求。時服務器的并發(fā)等級依賴于客戶的需求。(同時存在的連接越多,并發(fā)等級越高)(同時存在的連接越多,并發(fā)等級越高) 需求驅(qū)動雖然能夠提供動態(tài)的靈活性并提需求驅(qū)動雖然能夠提供動態(tài)的靈活性并提供較小的時延,但是并不一定是最優(yōu)化的。供較小的時延,但是并不一定是最優(yōu)化的。因為并發(fā)是有代價的。因為并發(fā)是有代價的。n 在需求驅(qū)動模式下,任一時刻的并發(fā)等級在需求驅(qū)動模式下,任一時刻的并發(fā)等級反映了當時服務器已收到但還沒有處理完反映了當時服務器已收到但還沒有
3、處理完畢的請求數(shù)目。畢的請求數(shù)目。n 線程的創(chuàng)建是有開銷的。而該開銷相對來線程的創(chuàng)建是有開銷的。而該開銷相對來說是昂貴的。(進程創(chuàng)建和進程切換都是說是昂貴的。(進程創(chuàng)建和進程切換都是有開銷的)有開銷的)n 這個開銷一方面會帶來處理的時延,另一這個開銷一方面會帶來處理的時延,另一方面會消耗系統(tǒng)資源。方面會消耗系統(tǒng)資源。n 當創(chuàng)建線程的開銷大于處理單個連接請求當創(chuàng)建線程的開銷大于處理單個連接請求的開銷時,會出現(xiàn)新的問題。的開銷時,會出現(xiàn)新的問題。n 假設創(chuàng)建線程的時間開銷為假設創(chuàng)建線程的時間開銷為c、處理請求、處理請求的時間開銷為的時間開銷為p。 并發(fā)式 循環(huán)式 0 C 2c 2c+p 創(chuàng)建從進程
4、1 創(chuàng)建從進程2 處理請求1 處理請求2 處理請求1 處理請求2 0 P 2p n 從上圖可以看出,當從上圖可以看出,當p1/c而小于而小于1/p時,并發(fā)設計出現(xiàn)問題而時,并發(fā)設計出現(xiàn)問題而循環(huán)方式仍然正常運行。循環(huán)方式仍然正常運行。n 從上面的分析中我們得出的結(jié)論是:從上面的分析中我們得出的結(jié)論是: 重負荷的服務器要提供最佳響應的話,不適合重負荷的服務器要提供最佳響應的話,不適合采用需并發(fā)的設計方案。采用需并發(fā)的設計方案。n 為了增加重負荷服務器的承載能力,我們?yōu)榱嗽黾又刎摵煞掌鞯某休d能力,我們應著重減少其平均單個請求的處理平均時應著重減少其平均單個請求的處理平均時間。也就是說要設法減少間
5、。也就是說要設法減少c+p/n。n p取決于服務所執(zhí)行的功能操作和取決于服務所執(zhí)行的功能操作和cpu的處的處理能力,對理能力,對p的減少是非常有限的,同時的減少是非常有限的,同時當當n-時時p/n-0。c是系統(tǒng)創(chuàng)建線程的開是系統(tǒng)創(chuàng)建線程的開銷,從某種程度上講是定值,無法減少。銷,從某種程度上講是定值,無法減少。因此我們的改進應該從減少線程創(chuàng)建的次因此我們的改進應該從減少線程創(chuàng)建的次數(shù)著手,使得平均每次請求處理所分攤的數(shù)著手,使得平均每次請求處理所分攤的線程創(chuàng)建開銷隨著線程創(chuàng)建開銷隨著n的增加而減少。的增加而減少。在服務器開始執(zhí)行時就創(chuàng)建在服務器開始執(zhí)行時就創(chuàng)建N個從線程個從線程/進進程,程,
6、將所接受的新的請求分配給這將所接受的新的請求分配給這N個從個從線程線程/進程中的一個處理,從全局來看,每進程中的一個處理,從全局來看,每個從線程個從線程/進程只創(chuàng)建一次,處理進程只創(chuàng)建一次,處理n個請求個請求所花費的平均線程開銷為所花費的平均線程開銷為NC/n。n 新產(chǎn)生的問題:新產(chǎn)生的問題:n 由于從線程由于從線程/進程在服務存活期間始終活躍,進程在服務存活期間始終活躍,并不退出,其所分配的內(nèi)存等資源將不會并不退出,其所分配的內(nèi)存等資源將不會自動釋放,因此在此種設計方案中從線程自動釋放,因此在此種設計方案中從線程程序中要特別注意對內(nèi)存等資源的分配和程序中要特別注意對內(nèi)存等資源的分配和釋放。釋
7、放。n 使用互斥我們可以使多個進程同時阻塞在使用互斥我們可以使多個進程同時阻塞在一個一個socket的的accept事件上,當有連接到事件上,當有連接到達時,系統(tǒng)只會喚醒一個從進程。該從進達時,系統(tǒng)只會喚醒一個從進程。該從進程處理完連接后會繼續(xù)調(diào)用程處理完連接后會繼續(xù)調(diào)用accept等待下等待下一連接到達。一連接到達。n 請思考:請思考:n 有些操作系統(tǒng)并不能自動為多個進程同時有些操作系統(tǒng)并不能自動為多個進程同時accept同一個同一個socket提供支持,或者能支提供支持,或者能支持同時持同時accept但是卻在一個新連接到達時但是卻在一個新連接到達時同時喚醒所有的阻塞進程。同時喚醒所有的阻
8、塞進程。n 在這樣的系統(tǒng)環(huán)境下我們?nèi)匀荒軌虿捎妙A在這樣的系統(tǒng)環(huán)境下我們?nèi)匀荒軌虿捎妙A分配的策略,不過要由我們自己來解決多分配的策略,不過要由我們自己來解決多個進程對同一個個進程對同一個socket的互斥訪問。的互斥訪問。n 可采用的解決互斥訪問的方式有兩個:使可采用的解決互斥訪問的方式有兩個:使用共享的互斥量用共享的互斥量mutex或者文件鎖定或者文件鎖定(file locking,即即flock)。采用互斥量的方式時,每個從進程在調(diào)用采用互斥量的方式時,每個從進程在調(diào)用accept前必須先調(diào)用前必須先調(diào)用pthread_mutex_lock來首先獲取互斥量的所有權,然后再調(diào)用來首先獲取互斥量
9、的所有權,然后再調(diào)用accept等待連接。這樣在任何時候只會有一等待連接。這樣在任何時候只會有一個從進程阻塞在該個從進程阻塞在該socket的的accept事件上。事件上。當一個新的連接事件時,等候當一個新的連接事件時,等候accept事件的事件的從進程被喚醒并調(diào)用從進程被喚醒并調(diào)用pthread_mutex_unlock釋放互斥量并轉(zhuǎn)釋放互斥量并轉(zhuǎn)入對所接受連接的處理,此時,另外的一入對所接受連接的處理,此時,另外的一個從進程獲得互斥量并等候個從進程獲得互斥量并等候accept事件,事件,在這種情況下,只要同時到達的連接請求在這種情況下,只要同時到達的連接請求小于從進程的數(shù)量,在連接等待隊列
10、中就小于從進程的數(shù)量,在連接等待隊列中就不會有未處理連接。不會有未處理連接。n Linux允許無連接服務器采用預分配策略。允許無連接服務器采用預分配策略。n 多個從進程同時綁定在一個多個從進程同時綁定在一個socket上調(diào)用上調(diào)用recvfrom獲得發(fā)送方的地址和其多發(fā)送的獲得發(fā)送方的地址和其多發(fā)送的數(shù)據(jù)報,并調(diào)用數(shù)據(jù)報,并調(diào)用sendto應答。一個數(shù)據(jù)報應答。一個數(shù)據(jù)報到達的時候系統(tǒng)只喚醒一個從進程。到達的時候系統(tǒng)只喚醒一個從進程。n 請思考:請思考:n UDP通常不為到達的數(shù)據(jù)報提供很長的隊通常不為到達的數(shù)據(jù)報提供很長的隊列,當突然到達多個請求時很容易使隊列列,當突然到達多個請求時很容易使
11、隊列溢出,溢出,UDP將丟棄隊列滿時到達的數(shù)據(jù)報。將丟棄隊列滿時到達的數(shù)據(jù)報。n 為了減少為了減少UDP由于隊列溢出而丟棄報文的由于隊列溢出而丟棄報文的可能性,應盡可能采用預分配方式處理??赡苄裕瑧M可能采用預分配方式處理。n NFS采用預分配方式通過同一采用預分配方式通過同一UDP套接字套接字通信。通信。根據(jù)處理機數(shù)目的多少,我們可以調(diào)整預根據(jù)處理機數(shù)目的多少,我們可以調(diào)整預分配從進程的數(shù)目,當系統(tǒng)中有分配從進程的數(shù)目,當系統(tǒng)中有K個處理器個處理器時,分配時,分配K個從進程,在最好情況下,可以個從進程,在最好情況下,可以使得接受處理幾乎沒有任何延遲。使得接受處理幾乎沒有任何延遲。n 參與預分
12、配策略創(chuàng)建從進程需要時間和資參與預分配策略創(chuàng)建從進程需要時間和資源,隨著進程數(shù)量的增加,系統(tǒng)的額外開源,隨著進程數(shù)量的增加,系統(tǒng)的額外開銷也在增加。那么對于處理時間很短的請銷也在增加。那么對于處理時間很短的請求來說,預分配方式也許并不是性能最好求來說,預分配方式也許并不是性能最好的選擇。的選擇。n 同一個服務對不同請求的處理時間的開銷同一個服務對不同請求的處理時間的開銷也是不定的,因此我們無法準確的預知該也是不定的,因此我們無法準確的預知該服務的開銷大小,也就是說我們無法預知服務的開銷大小,也就是說我們無法預知對于某個請求的處理是采用循環(huán)方式還是對于某個請求的處理是采用循環(huán)方式還是采用并發(fā)方式
13、性能更好。采用并發(fā)方式性能更好。n 如果我們能夠根據(jù)每個請求的處理開銷來如果我們能夠根據(jù)每個請求的處理開銷來決定是采用循環(huán)方式或者采用并發(fā)方式處決定是采用循環(huán)方式或者采用并發(fā)方式處理的話,在某種程度上我們能夠獲得比固理的話,在某種程度上我們能夠獲得比固定采用一種方式處理更佳的性能。定采用一種方式處理更佳的性能。n 當服務器接受一個新的連接時,并不創(chuàng)建當服務器接受一個新的連接時,并不創(chuàng)建新的線程,而是首先采用循環(huán)方式處理,新的線程,而是首先采用循環(huán)方式處理,同時設置一個定時器,如果在定時器到期同時設置一個定時器,如果在定時器到期前請求處理完畢則清除定時器,否則創(chuàng)建前請求處理完畢則清除定時器,否則
14、創(chuàng)建一個新的從進程。這樣對于處理時間一個新的從進程。這樣對于處理時間短的請求采用的是循環(huán)方式,而處理時間短的請求采用的是循環(huán)方式,而處理時間長的請求采用的是并發(fā)方式。通過動態(tài)調(diào)長的請求采用的是并發(fā)方式。通過動態(tài)調(diào)整定時器的時延設置,我們就能夠獲得一整定時器的時延設置,我們就能夠獲得一個比較好的綜合性能。個比較好的綜合性能。n 預分配和延遲分配基于同一原理。預分配和延遲分配基于同一原理。n 通過把服務器的并發(fā)等級從當前活躍的請通過把服務器的并發(fā)等級從當前活躍的請求數(shù)目中分力出來,設計人員可獲得靈活求數(shù)目中分力出來,設計人員可獲得靈活性并提高服務器效率。性并提高服務器效率。n 既然延遲分配技術和預
15、分配技術都在某種既然延遲分配技術和預分配技術都在某種程度上能夠提供服務器的性能,那么如果程度上能夠提供服務器的性能,那么如果能夠?qū)⒍呓Y(jié)合,在采用預分配的同時動能夠?qū)⒍呓Y(jié)合,在采用預分配的同時動態(tài)的變更服務器的并行等級,在某些情況態(tài)的變更服務器的并行等級,在某些情況下將使我們獲得更佳的系統(tǒng)性能。下將使我們獲得更佳的系統(tǒng)性能。n 服務器啟動時,不預分配從進程,只有當服務器啟動時,不預分配從進程,只有當定時器計時到達時才創(chuàng)建從進程。定時器計時到達時才創(chuàng)建從進程。n 那么從進程是應該只處理單個請求就退出那么從進程是應該只處理單個請求就退出還是該永久運行呢?還是該永久運行呢?n 如果從進程處理單個請求就退出,實際上如果從進程處理單個請求就退出,實際上就不是預分配而是需求驅(qū)動的并發(fā)方式。就不是預分配而是需求驅(qū)動的并發(fā)方式。n 如果從進程永久運行,會出現(xiàn)什么情況呢。如果從進程永久運行,會出現(xiàn)什么情況呢。每出現(xiàn)一次長時間的請求處理時延,我們每出現(xiàn)一次長時間的請求處理時延,我們就會創(chuàng)建一個從進程,那么隨著運行時間就會創(chuàng)建一個從進程,那么隨著運行時間的延長,該服務器的并行等級將無限增長。的延長,該服務器的并行等級將無限增長。處理方法有兩種:處理方法有兩種:l只能創(chuàng)建有限個從進程,當從進程到達只能創(chuàng)建有限個從進程,當從進程到達一定一定數(shù)量后不再
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024跨境電商服務平臺居間合同
- 二零二四年中英文教育培訓機構(gòu)合作服務合同3篇
- 2025年度物流倉儲場地租賃及供應鏈管理合同6篇
- 2025年度航空航天產(chǎn)業(yè)技術工人勞動合同3篇
- 2025年度網(wǎng)絡安全監(jiān)測預警服務合同6篇
- 2025年度大型企業(yè)員工培訓服務采購合同范本3篇
- 二零二四年A公司網(wǎng)站開發(fā)合同協(xié)議書
- 二零二五年度大廈商場租賃合同(含節(jié)假日營業(yè)規(guī)定)3篇
- 2025年度餐廚廢棄物處置與廢棄物處理設施運營管理合同3篇
- 2025版煤礦安全生產(chǎn)責任險投保合同3篇
- 春節(jié)文化常識單選題100道及答案
- 12123交管學法減分考試題及答案
- 2024年杭州師范大學附屬醫(yī)院招聘高層次緊缺專業(yè)人才筆試真題
- 制造業(yè)BCM業(yè)務連續(xù)性管理培訓
- 商場停車場管理制度
- 24年追覓在線測評28題及答案
- TGDNAS 043-2024 成人靜脈中等長度導管置管技術
- 《陸上風電場工程概算定額》NBT 31010-2019
- 皮帶輸送機工程施工電氣安裝措施要點
- 藥房(冰柜)溫濕度表
- QJ903.9A-1995航天產(chǎn)品工藝文件管理制度管理用工藝文件編制規(guī)則
評論
0/150
提交評論