999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Linux的多線(xiàn)程池并發(fā)Web服務(wù)器設(shè)計(jì)

2015-01-04 08:51:04任海蘭
電子設(shè)計(jì)工程 2015年11期
關(guān)鍵詞:進(jìn)程消費(fèi)者模型

陳 濤,任海蘭

(武漢郵電科學(xué)研究院 湖北 武漢 430074)

Web服務(wù)器常常需要處理多個(gè)并發(fā)請(qǐng)求,針對(duì)每一個(gè)請(qǐng)求,Web服務(wù)器會(huì)有相應(yīng)的并發(fā)程序來(lái)執(zhí)行相關(guān)操作。

這一過(guò)程中,使用進(jìn)程是構(gòu)造并發(fā)程序最簡(jiǎn)單的方法:為了實(shí)現(xiàn)進(jìn)程間的信息交互,它們必須使用顯式的進(jìn)程間通信((IPC)機(jī)制,由于進(jìn)程控制和IPC的開(kāi)銷(xiāo)很高導(dǎo)致基于進(jìn)程的設(shè)計(jì)運(yùn)行速度往往比較慢[2-4]。

為解決進(jìn)程間信息共享而造成的高開(kāi)銷(xiāo)問(wèn)題,本文采用多線(xiàn)程池的并發(fā)設(shè)計(jì),利用信號(hào)量訪(fǎng)問(wèn)共享變量,使用生產(chǎn)者一消費(fèi)者模型降低線(xiàn)程開(kāi)銷(xiāo),從而提高系統(tǒng)訪(fǎng)問(wèn)速度和資源利用率。

1 基于多進(jìn)程Web服務(wù)器的不足

目前主流boa服務(wù)器主要基于多進(jìn)程來(lái)構(gòu)造并發(fā)程序。首先由父進(jìn)程去接受客戶(hù)端的連接請(qǐng)求,然后創(chuàng)建一個(gè)新的子進(jìn)程去為每一個(gè)客戶(hù)端提供服務(wù)。這種父子進(jìn)程會(huì)共享文件表,但是不共享用戶(hù)地址空間?;谶@種特性,這類(lèi)進(jìn)程中不會(huì)存在一個(gè)進(jìn)程覆蓋另一個(gè)進(jìn)程的虛擬存儲(chǔ)器,但是這也使得進(jìn)程共享狀態(tài)信息變得更加困難,因而基于多進(jìn)程Web服務(wù)器引入了IPC機(jī)制。

在面對(duì)大量并發(fā)處理請(qǐng)求時(shí),由于進(jìn)程機(jī)制和IPC機(jī)制開(kāi)銷(xiāo)大,會(huì)使得服務(wù)器延時(shí)效果明顯。

2 改進(jìn)服務(wù)器的設(shè)計(jì)要素

2.1 基于線(xiàn)程池的并發(fā)設(shè)計(jì)

線(xiàn)程是程序執(zhí)行流的最小單元,線(xiàn)程由內(nèi)核自動(dòng)調(diào)度。一個(gè)進(jìn)程里可以同時(shí)運(yùn)行多個(gè)線(xiàn)程,每個(gè)線(xiàn)程都有自己的線(xiàn)程上下文,包括一個(gè)唯一的棧、棧指針、條件碼、程序計(jì)數(shù)器、整數(shù)線(xiàn)程ID、通用目的寄存器,運(yùn)行在同一個(gè)進(jìn)程里的所有線(xiàn)程共享該進(jìn)程的整個(gè)虛擬地址空間。

同時(shí),線(xiàn)程執(zhí)行又區(qū)別于進(jìn)程執(zhí)行,在于:1)較于進(jìn)程環(huán)境,一個(gè)線(xiàn)程環(huán)境擁有的系統(tǒng)資源極少;2)線(xiàn)程不構(gòu)成父子層次關(guān)系。

在線(xiàn)程池技術(shù)中,我們?cè)谌蝿?wù)還沒(méi)有到來(lái)之前,創(chuàng)建一定默認(rèn)數(shù)量的線(xiàn)程。這些線(xiàn)程均處于睡眠狀態(tài),不消耗CPU,只占用較少的內(nèi)存空間。當(dāng)輪詢(xún)到有請(qǐng)求到來(lái)后,線(xiàn)程池將會(huì)分配給這次請(qǐng)求一個(gè)空閑的線(xiàn)程,進(jìn)行執(zhí)行。

當(dāng)預(yù)先創(chuàng)建的線(xiàn)程都已處于運(yùn)行狀態(tài),即并發(fā)請(qǐng)求數(shù)量多于線(xiàn)程池中最少空閑線(xiàn)程數(shù)時(shí),線(xiàn)程池將會(huì)自由創(chuàng)建一定數(shù)量的新線(xiàn)程,用于處理更多的并發(fā)請(qǐng)求。當(dāng)系統(tǒng)比較閑的時(shí)候,線(xiàn)程池就會(huì)移除一部分已經(jīng)停用的線(xiàn)程,以減少系統(tǒng)負(fù)荷。

線(xiàn)程池技術(shù)由于具有節(jié)省系統(tǒng)開(kāi)銷(xiāo),信息共享容易,完成時(shí)間短的優(yōu)點(diǎn)非常適合處理大數(shù)量的并發(fā)請(qǐng)求。

2.2 基于信號(hào)量機(jī)制的資源共享

信號(hào)量模型只支持P,V兩種操作,且均為原子操作,要么都不執(zhí)行,要么全部執(zhí)行[5-6]。

1)P(s):如果 S 為非零,那么 P 操作就將 S 的值減 1,然后返回。如果S為零,那么當(dāng)前進(jìn)程(線(xiàn)程)將會(huì)被阻塞,直至S值不為0;當(dāng)S值不為0,被阻塞的進(jìn)程會(huì)重啟。重啟之后,S的值減1。

2)V(s):對(duì)S進(jìn)行操作,就是將 S的值加 1。 為實(shí)現(xiàn)內(nèi)核同一時(shí)刻對(duì)共享變量的互斥訪(fǎng)問(wèn),將信號(hào)量(初始值為1)與共享變量聯(lián)系起來(lái),用P和V操作將相應(yīng)的臨界區(qū)保護(hù)起來(lái),從而使得在任何時(shí)間點(diǎn)上,信號(hào)量操作確保對(duì)臨界區(qū)的互斥訪(fǎng)問(wèn)。

調(diào)度對(duì)共享資源的訪(fǎng)問(wèn)是信號(hào)量的另一個(gè)重要作用,在某一時(shí)刻,程序中某個(gè)條件一旦為真,一個(gè)線(xiàn)程會(huì)通過(guò)信號(hào)量來(lái)告知其他線(xiàn)程允許訪(fǎng)問(wèn)。

2.3 生產(chǎn)者一消費(fèi)者模型

圖1所示的生產(chǎn)者—消費(fèi)者模型是一個(gè)經(jīng)典的信號(hào)量調(diào)度同步示例。生產(chǎn)者和消費(fèi)者線(xiàn)程共享一個(gè)有限單元的緩存區(qū)。

圖1 生產(chǎn)者一消費(fèi)者模型Fig.1 Producer-consumer model

生產(chǎn)者線(xiàn)程不斷地生產(chǎn)新的項(xiàng)目并把它們插入到緩存區(qū)中;消費(fèi)者線(xiàn)程則不斷地從緩存區(qū)中取出這些項(xiàng)目,然后消費(fèi)它們。模型中允許有數(shù)量不同的生產(chǎn)者和消費(fèi)者。

在本次設(shè)計(jì)中,生產(chǎn)者線(xiàn)程,消費(fèi)者線(xiàn)程均來(lái)自于線(xiàn)程池。主程序輪詢(xún)到請(qǐng)求到來(lái)后,線(xiàn)程池會(huì)給請(qǐng)求分配一個(gè)空閑的線(xiàn)程,進(jìn)行相關(guān)任務(wù)的執(zhí)行。

由于插入和取出兩種操作涉及到對(duì)緩存區(qū)共享變量的更新,所以需要保證它們的互斥訪(fǎng)問(wèn)。除此之外,還需要考慮調(diào)度對(duì)緩存區(qū)的訪(fǎng)問(wèn),例如,當(dāng)緩存區(qū)為空的時(shí)候,消費(fèi)者將被阻塞,直到不為空的時(shí)候被喚醒;同理,當(dāng)緩存區(qū)滿(mǎn)的情況下,生產(chǎn)者應(yīng)該被阻塞,等待有空的位置出現(xiàn)。

3 多線(xiàn)程池并發(fā)的Web服務(wù)器設(shè)計(jì)

3.1 設(shè)計(jì)模型

在Web服務(wù)程序中,通常將收到的客戶(hù)請(qǐng)求分為如下4個(gè)部分來(lái)進(jìn)行處理:

1)監(jiān)聽(tīng)服務(wù)端口,與客戶(hù)端建立連接;

2)解析URL與報(bào)頭;

3)靜態(tài)/動(dòng)態(tài)請(qǐng)求處理;

4)消息的應(yīng)答機(jī)制。

本文基于多線(xiàn)程池并發(fā)Web服務(wù)器設(shè)計(jì)模型如圖2所示。

圖2 多線(xiàn)程池并發(fā)服務(wù)器模型Fig.2 Concurrent multi-threaded server model pool

圖2 中每一個(gè)數(shù)據(jù)隊(duì)列均有對(duì)應(yīng)的線(xiàn)程池對(duì)其進(jìn)行輪詢(xún)。在每個(gè)線(xiàn)程池中,都有一定數(shù)量的處于睡眠狀態(tài)的線(xiàn)程。主程序在監(jiān)聽(tīng)到請(qǐng)求后,將請(qǐng)求消息放入請(qǐng)求解析數(shù)據(jù)隊(duì)列。線(xiàn)程池輪詢(xún)到有新請(qǐng)求,會(huì)給每個(gè)消息請(qǐng)求分配一個(gè)空閑線(xiàn)程。當(dāng)有多個(gè)并發(fā)請(qǐng)求到來(lái)時(shí),將會(huì)出現(xiàn)報(bào)文解析線(xiàn)程組。用戶(hù)請(qǐng)求信息完成報(bào)文解析處理后,將進(jìn)入事物處理請(qǐng)求隊(duì)列。請(qǐng)求在事物處理隊(duì)列和消息回復(fù)隊(duì)列中的處理機(jī)制一致。

這樣一來(lái),每種任務(wù)線(xiàn)程最多只需關(guān)心自己的處理程序,與和自己相關(guān)的幾個(gè)消息隊(duì)列即可。這種方式使服務(wù)模塊化,易于管理和維護(hù)。流水線(xiàn)的工作方式使服務(wù)器的多任務(wù)處理性能得到進(jìn)一步優(yōu)化。

3.2 Web服務(wù)器主要處理流程

根據(jù)網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā)模型和HTTP協(xié)議,Web服務(wù)器設(shè)計(jì)實(shí)現(xiàn)的主要操作流程及功能如下:

1)主函數(shù)處理流程:緩沖I/O初始化->打開(kāi)監(jiān)聽(tīng)端口->建立線(xiàn)程組->監(jiān)聽(tīng)請(qǐng)求連接->將連接放入線(xiàn)程組->從連接組中取出連接->執(zhí)行指定服務(wù)。

2)服務(wù)器響應(yīng)請(qǐng)求流程:讀取請(qǐng)求->獲取請(qǐng)求方法、URL、和版本->判斷請(qǐng)求方法->解析URL->判斷訪(fǎng)問(wèn)權(quán)限->放入事務(wù)請(qǐng)求處理隊(duì)列。

3)解析 URL流程:根據(jù) CGI判斷靜態(tài)/動(dòng)態(tài)標(biāo)服務(wù)->拷貝URL到FILENAME中->添加默認(rèn)文件home.html->返回靜態(tài)/動(dòng)態(tài)標(biāo)志。

4)為客戶(hù)端提供靜態(tài)服務(wù)流程:打開(kāi)指定文件->拷貝到虛擬內(nèi)存->拷貝虛擬內(nèi)存至指定賬戶(hù)->關(guān)閉描述符、釋放虛擬內(nèi)存。

5)為客戶(hù)端提供動(dòng)態(tài)服務(wù)流程:構(gòu)造線(xiàn)程來(lái)執(zhí)行CGI程序->通過(guò)調(diào)用不同的參數(shù),來(lái)產(chǎn)生細(xì)節(jié)不同的動(dòng)態(tài)文檔->等待線(xiàn)程執(zhí)行結(jié)束,回收資源。

4 改進(jìn)Web服務(wù)器性能測(cè)試

依據(jù)上述設(shè)計(jì)理念,Web服務(wù)器在Linux系統(tǒng)下采用C語(yǔ)言編寫(xiě),用gcc編譯實(shí)現(xiàn)。

圖3給出了訪(fǎng)問(wèn)靜態(tài)頁(yè)test.html的效果示意圖,圖4給出了訪(fǎng)問(wèn)動(dòng)態(tài)頁(yè)cgi-bin/add的效果示意圖。測(cè)試證明該Web服務(wù)器能實(shí)現(xiàn)服務(wù)器的基本功能,即在服務(wù)器端接收到HTTP請(qǐng)求后,可以予以響應(yīng)。

圖3 靜態(tài)頁(yè)面Fig.3 Static pages

圖4 動(dòng)態(tài)頁(yè)面Fig.4 Dynamic pages

Apache中有個(gè)名為ab的程序,可以對(duì)Apache其它類(lèi)型的服務(wù)器進(jìn)行網(wǎng)站訪(fǎng)問(wèn)壓力測(cè)試。本文使用該軟件來(lái)進(jìn)行壓力測(cè)試,兩次測(cè)試中,均向目標(biāo)Web服務(wù)器累計(jì)發(fā)出1 000次請(qǐng)求,每次100個(gè)請(qǐng)求并發(fā)(模擬 100人同時(shí)訪(fǎng)問(wèn)),圖5為普通嵌入式Boa服務(wù)器測(cè)試結(jié)果截圖,圖6為改進(jìn)后Web服務(wù)器測(cè)試結(jié)果截圖。

圖5 普通web服務(wù)器測(cè)試結(jié)果Fig.5 Results of ordinary web server test

圖6 改進(jìn)后Web服務(wù)器測(cè)試結(jié)果Fig.6 Results of improved web server test

這兩份性能測(cè)試單有兩個(gè)重要測(cè)試指標(biāo):1)每秒鐘平均處理的請(qǐng)求數(shù);2)每個(gè)線(xiàn)程下的一組請(qǐng)求(100個(gè))平均消耗時(shí)間。改進(jìn)服務(wù)器前后數(shù)據(jù)分別為:7.35/9.19(改進(jìn)后),13 607.549 ms/10 884.814 ms(改進(jìn)后)。

通過(guò)數(shù)據(jù)可以看出改進(jìn)后的Web服務(wù)器能有效降低系統(tǒng)開(kāi)銷(xiāo),大幅度提高Web服務(wù)器的系統(tǒng)資源利用率和服務(wù)效率。

5 結(jié)束語(yǔ)

基于進(jìn)程或單純基于線(xiàn)程服務(wù)器普遍會(huì)存在著利用率不高、資源消耗大等問(wèn)題。本文設(shè)計(jì)的基于多線(xiàn)程池并發(fā)Web服務(wù)器,利用生產(chǎn)者一消費(fèi)者模型和多線(xiàn)程池高效率實(shí)現(xiàn)了資源調(diào)度及共享。設(shè)計(jì)實(shí)現(xiàn)的改進(jìn)Web服務(wù)器能實(shí)現(xiàn)Web服務(wù)器的基本功能,能接受一定規(guī)模的并發(fā)客戶(hù)請(qǐng)求并予以響應(yīng),具有較高的服務(wù)效率。后續(xù)還有一些工作需要完善,如進(jìn)一步完善用戶(hù)的動(dòng)態(tài)請(qǐng)求處理,加強(qiáng)對(duì)請(qǐng)求頭信息的分析等。

[1]Randal E Bryant,David O'Hallaron.Computer systems:a programmer's perspec;tive[M].New Jersey:Prentioe Hall Publisher.2003.

[2]張根寶,胡杰.Linux集群環(huán)境下監(jiān)控Web服務(wù)器的Shell腳本設(shè)計(jì)[J].化工自動(dòng)化及儀表,2010,37(10):99-101.ZHANG Gen-bao,HU Jie.Shell script design of monitoring web server under linux cluster environment[J].Control and Instruments in Chemical Industry,2010,37(10):99-101.

[3]張估,曹奇英.Web服務(wù)器負(fù)載壓力模型及其優(yōu)化原則[J].計(jì)算機(jī)應(yīng)用軟件與軟件,2010,27(12):139-141.ZHANG Gu,CAO Qi-ying.Load pressure model and optimization principles of web server[J].Computer Applications and Software,2010,27(12):139-141.

[4]胡中棟,曾志勇.基于多路徑的DSR路由協(xié)議改進(jìn)[J].江西理工大學(xué)學(xué)報(bào),2011,32(3):45-48.HU Zhong-dong,ZENG Zhi-yong.Improved DSR-routing protocol based on multipath[J].The Jiangxi University of Science and Technology Journal,2011,32(3):45-48.

[5]Richard Stevens W,Bill Fenner.Unix network programming volume 1:the Sockets networking API,third edition[M].New Jersey:Prentice Hall Publisher,2003.

[6]Tanenbaum A.Modern operating systems,third edition[M].New Jersey:Prentice Hall Pnhlisher,2007.

猜你喜歡
進(jìn)程消費(fèi)者模型
一半模型
消費(fèi)者網(wǎng)上購(gòu)物六注意
重要模型『一線(xiàn)三等角』
重尾非線(xiàn)性自回歸模型自加權(quán)M-估計(jì)的漸近分布
債券市場(chǎng)對(duì)外開(kāi)放的進(jìn)程與展望
知識(shí)付費(fèi)消費(fèi)者
3D打印中的模型分割與打包
悄悄偷走消費(fèi)者的創(chuàng)意
悄悄偷走消費(fèi)者的創(chuàng)意
社會(huì)進(jìn)程中的新聞學(xué)探尋
主站蜘蛛池模板: 好紧太爽了视频免费无码| 黄色国产在线| 国产乱子伦精品视频| 亚洲永久视频| 欧美日韩精品一区二区在线线| 强奷白丝美女在线观看| 国产1区2区在线观看| 国产乱人乱偷精品视频a人人澡| 国产一区成人| 99人妻碰碰碰久久久久禁片| 亚洲成a人在线播放www| 全部毛片免费看| 欧美成人日韩| 毛片手机在线看| 亚洲人成电影在线播放| 国产爽妇精品| 国产精品久久久久久搜索| 亚洲精品在线观看91| 成人亚洲视频| 久久精品人人做人人爽电影蜜月| 国产日韩av在线播放| 国产又粗又猛又爽视频| 91毛片网| 91视频国产高清| 免费三A级毛片视频| 久久www视频| 国产一区二区精品福利| 免费国产不卡午夜福在线观看| 国产日韩欧美一区二区三区在线| 日韩区欧美国产区在线观看| 国产欧美专区在线观看| 国产99热| 亚洲无码高清免费视频亚洲 | 久久香蕉国产线看观看亚洲片| 狠狠做深爱婷婷久久一区| 久久亚洲天堂| а∨天堂一区中文字幕| 亚洲成aⅴ人在线观看| 在线观看欧美精品二区| 亚洲aⅴ天堂| 国产精品浪潮Av| 97在线免费| 婷婷亚洲视频| 亚洲香蕉久久| 99这里只有精品6| 国产精品手机视频| 99视频精品全国免费品| 亚洲 欧美 日韩综合一区| 日韩国产黄色网站| a毛片在线免费观看| 凹凸精品免费精品视频| 久久综合色播五月男人的天堂| 国产全黄a一级毛片| 亚洲成人网在线播放| 亚洲精品福利视频| 欧美在线黄| 欧美综合区自拍亚洲综合天堂| 亚洲免费毛片| 伦精品一区二区三区视频| 日本不卡在线| 国产人人干| 亚洲人成日本在线观看| 色香蕉影院| 九九热在线视频| 亚洲 日韩 激情 无码 中出| 日韩A级毛片一区二区三区| 54pao国产成人免费视频| 国产精品视频导航| 国产呦精品一区二区三区下载| 欧美精品二区| 亚洲国产中文精品va在线播放 | 青草视频在线观看国产| 高清精品美女在线播放| 乱系列中文字幕在线视频| 久久精品欧美一区二区| 欧美日韩北条麻妃一区二区| 久久99精品久久久久纯品| 免费看的一级毛片| 国模私拍一区二区| 亚洲香蕉在线| 不卡网亚洲无码| 国产精品视频a|