多路處理模塊,Multi-Processing Modules,MPMApache是基于模塊化的設(shè)計(jì),而Apache 2.0更擴(kuò)展了模塊化設(shè)計(jì)到Web服務(wù)器的最基本功能。服務(wù)器裝載了一種多路處理模塊,負(fù)責(zé)綁定本機(jī)網(wǎng)絡(luò)端口、接受請(qǐng)求,并調(diào)度子進(jìn)程來處理請(qǐng)求。
中文名稱 | 多路處理模塊 | 外文名稱 | Multi-Processing Modules |
---|---|---|---|
簡(jiǎn)稱 | MPM | 存在 | 服務(wù)器 |
作用 | 負(fù)責(zé)綁定本機(jī)網(wǎng)絡(luò)端口、接受請(qǐng)求等 | 基于 | 模塊化的設(shè)計(jì) |
多路處理模塊簡(jiǎn)介
Apache HTTP服務(wù)器被設(shè)計(jì)為一個(gè)強(qiáng)大的、靈活的能夠在多種平臺(tái)以及不同環(huán)境下工作的服務(wù)器。不同的平臺(tái)和不同的環(huán)境經(jīng)常產(chǎn)生不同的需求,或是為了達(dá)到同樣的最佳效果而采用不同的方法。Apache憑借它的模塊化設(shè)計(jì)很好的適應(yīng)了大量不同的環(huán)境。這一設(shè)計(jì)使得網(wǎng)站管理員能夠在編譯時(shí)和運(yùn)行時(shí)憑借載入不同的模塊來決定服務(wù)器的不同附加功能。
Apache2.0將這種模塊化的設(shè)計(jì)延伸到了web服務(wù)器的基礎(chǔ)功能上。這個(gè)版本帶有多路處理模塊(MPM)的選擇以處理網(wǎng)絡(luò)端口綁定、接受請(qǐng)求并指派子進(jìn)程來處理這些請(qǐng)求。
將模塊化設(shè)計(jì)延伸到這一層次主要有以下兩大好處:
Apache可以更簡(jiǎn)潔、更有效地支持各種操作系統(tǒng)。尤其是在mpm_winnt中使用本地網(wǎng)絡(luò)特性代替Apache1.3中使用的POSIX模擬層后,Windows版本的Apache現(xiàn)在具有更好的性能。這個(gè)優(yōu)勢(shì)借助特定的MPM同樣延伸到了其他各種操作系統(tǒng)。
服務(wù)器可以為某些特定的站點(diǎn)進(jìn)行定制。比如,需要更好伸縮性的站點(diǎn)可以選擇象worker或event這樣線程化的MPM,而需要更好的穩(wěn)定性和兼容性以適應(yīng)一些舊的軟件的站點(diǎn)可以用prefork 。
從用戶角度來看,MPM更像其他的Apache模塊。主要的不同在于:不論何時(shí),必須有且僅有一個(gè)MPM被載入到服務(wù)器中?,F(xiàn)有的MPM列表可以在模塊索引中找到。
MPM必須在編譯配置時(shí)進(jìn)行選擇,并靜態(tài)編譯到服務(wù)器中。如果編譯器能夠確定線程功能被啟用,它將會(huì)負(fù)責(zé)優(yōu)化大量功能。因?yàn)橐恍㎝PM在Unix上使用了線程,而另外一些沒有使用,所以如果在編譯配置時(shí)選擇MPM并靜態(tài)編譯進(jìn)Apache,Apache將會(huì)有更好的表現(xiàn)。
可以在使用configure腳本時(shí)用 --with-mpm=NAME 選項(xiàng)指定MPM,NAME就是想使用的MPM的名稱。
一旦服務(wù)器編譯完成,就可以用 ./httpd -l 命令來查看使用了哪個(gè)MPM。這個(gè)命令將列出所有已經(jīng)被編譯到服務(wù)器中的模塊,包括MPM。
下表列出了不同操作系統(tǒng)上默認(rèn)的MPM。如果你在編譯時(shí)沒有進(jìn)行選擇,這將是默認(rèn)選擇的MPM。
BeOS | beos |
Netware | mpm_netware |
OS/2 | mpmt_os2 |
Unix | prefork |
Windows | mpm_winnt |
beos 專門針對(duì)BeOS優(yōu)化過的多路處理模塊(MPM)
event 一個(gè)標(biāo)準(zhǔn)workerMPM的實(shí)驗(yàn)性變種。
mpm_netware Novell NetWare優(yōu)化過的線程化的多路處理模塊(MPM)
mpmt_os2 專門針對(duì)OS/2優(yōu)化過的混合多進(jìn)程多線程多路處理模塊(MPM)
prefork 一個(gè)非線程型的、預(yù)派生的MPM
mpm_winnt 用于Windows NT/windows 2000/Windows XP/windows 2003 系列的MPM
worker 線程型的MPM,實(shí)現(xiàn)了一個(gè)混合的多線程多處理MPM,允許一個(gè)子進(jìn)程中包含多個(gè)線程。
一個(gè)非線程型的、預(yù)派生的MPM 概述
這個(gè)多路處理模塊(MPM)實(shí)現(xiàn)了一個(gè)非線程型的、預(yù)派生的web服務(wù)器,它的工作方式類似于Apache 1.3。它適合于沒有線程安全庫,需要避免線程兼容性問題的系統(tǒng)。它是要求將每個(gè)請(qǐng)求相互獨(dú)立的情況下最好的MPM,這樣若一個(gè)請(qǐng)求出現(xiàn)問題就不會(huì)影響到其他請(qǐng)求。
這個(gè)MPM具有很強(qiáng)的自我調(diào)節(jié)能力,只需要很少的配置指令調(diào)整。最重要的是將MaxClients設(shè)置為一個(gè)足夠大的數(shù)值以處理潛在的請(qǐng)求高峰,同時(shí)又不能太大,以致需要使用的內(nèi)存超出物理內(nèi)存的大小。
工作方式
一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)產(chǎn)生子進(jìn)程,這些子進(jìn)程用于監(jiān)聽請(qǐng)求并作出應(yīng)答。Apache總是試圖保持一些備用的(spare)或者是空閑的子進(jìn)程用于迎接即將到來的請(qǐng)求。這樣客戶端就不需要在得到服務(wù)前等候子進(jìn)程的產(chǎn)生。
StartServers, MinSpareServers, MaxSpareServers, MaxClients指令用于調(diào)節(jié)父進(jìn)程如何產(chǎn)生子進(jìn)程。通常情況下Apache具有很強(qiáng)的自我調(diào)節(jié)能力,所以一般的網(wǎng)站不需要調(diào)整這些指令的默認(rèn)值。可能需要處理最大超過256個(gè)并發(fā)請(qǐng)求的服務(wù)器可能需要增加MaxClients的值。內(nèi)存比較小的機(jī)器則需要減少M(fèi)axClients的值以保證服務(wù)器不會(huì)崩潰。更多關(guān)于調(diào)整進(jìn)程產(chǎn)生的問題請(qǐng)參見性能方面的提示。
在Unix系統(tǒng)中,父進(jìn)程通常以root身份運(yùn)行以便邦定80端口,而Apache產(chǎn)生的子進(jìn)程通常以一個(gè)低特權(quán)的用戶運(yùn)行。User和Group指令用于設(shè)置子進(jìn)程的低特權(quán)用戶。運(yùn)行子進(jìn)程的用戶必須要對(duì)它所服務(wù)的內(nèi)容有讀取的權(quán)限,但是對(duì)服務(wù)內(nèi)容之外的其他資源必須擁有盡可能少的權(quán)限。
MaxRequestsPerChild指令控制服務(wù)器殺死舊進(jìn)程產(chǎn)生新進(jìn)程的頻率。
支持混合的多線程多進(jìn)程的多路處理模塊
概述
此多路處理模塊(MPM)使網(wǎng)絡(luò)服務(wù)器支持混合的多線程多進(jìn)程。由于使用線程來處理請(qǐng)求,所以可以處理海量請(qǐng)求,而系統(tǒng)資源的開銷小于基于進(jìn)程的MPM。但是,它也使用了多進(jìn)程,每個(gè)進(jìn)程又有多個(gè)線程,以獲得基于進(jìn)程的MPM的穩(wěn)定性。
控制這個(gè)MPM的最重要的指令是,控制每個(gè)子進(jìn)程允許建立的線程數(shù)的ThreadsPerChild指令,和控制允許建立的總線程數(shù)的MaxClients指令。
工作方式
每個(gè)進(jìn)程可以擁有的線程數(shù)量是固定的。服務(wù)器會(huì)根據(jù)負(fù)載情況增加或減少進(jìn)程數(shù)量。一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)子進(jìn)程的建立。每個(gè)子進(jìn)程可以建立ThreadsPerChild數(shù)量的服務(wù)線程和一個(gè)監(jiān)聽線程,該監(jiān)聽線程監(jiān)聽接入請(qǐng)求并將其傳遞給服務(wù)線程處理和應(yīng)答。
Apache總是試圖維持一個(gè)備用(spare)或是空閑的服務(wù)線程池。這樣,客戶端無須等待新線程或新進(jìn)程的建立即可得到處理。初始化時(shí)建立的進(jìn)程數(shù)量由StartServers指令決定。隨后父進(jìn)程檢測(cè)所有子進(jìn)程中空閑線程的總數(shù),并新建或結(jié)束子進(jìn)程使空閑線程的總數(shù)維持在MinSpareThreads和MaxSpareThreads所指定的范圍內(nèi)。由于這個(gè)過程是自動(dòng)調(diào)整的,幾乎沒有必要修改這些指令的缺省值。可以并行處理的客戶端的最大數(shù)量取決于MaxClients指令?;顒?dòng)子進(jìn)程的最大數(shù)量取決于MaxClients除以ThreadsPerChild的值。
有兩個(gè)指令設(shè)置了活動(dòng)子進(jìn)程數(shù)量和每個(gè)子進(jìn)程中線程數(shù)量的硬限制。要想改變這個(gè)硬限制必須完全停止服務(wù)器然后再啟動(dòng)服務(wù)器(直接重啟是不行的),ServerLimit是活動(dòng)子進(jìn)程數(shù)量的硬限制,它必須大于或等于MaxClients除以ThreadsPerChild的值。ThreadLimit是所有服務(wù)線程總數(shù)的硬限制,它必須大于或等于ThreadsPerChild指令。這兩個(gè)指令必須出現(xiàn)在其他workerMPM指令的前面。
在設(shè)置的活動(dòng)子進(jìn)程數(shù)量之外,還可能有額外的子進(jìn)程處于"正在中止"的狀態(tài)但是其中至少有一個(gè)服務(wù)線程仍然在處理客戶端請(qǐng)求,直到到達(dá)MaxClients以致結(jié)束進(jìn)程,雖然實(shí)際數(shù)量會(huì)很小。這個(gè)行為能夠通過以下禁止特別的子進(jìn)程中止的方法來避免:
* 將MaxRequestsPerChild設(shè)為"0"
* 將MaxSpareThreads和MaxClients設(shè)為相同的值
一個(gè)典型的針對(duì)workerMPM的配置如下:
ServerLimit 16
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
在Unix中,為了能夠綁定80端口,父進(jìn)程一般都是以root身份啟動(dòng),隨后,Apache以較低權(quán)限的用戶建立子進(jìn)程和線程。User和Group指令用于設(shè)置Apache子進(jìn)程的權(quán)限。雖然子進(jìn)程必須對(duì)其提供的內(nèi)容擁有讀權(quán)限,但應(yīng)該盡可能給予它較少的特權(quán)。另外,除非使用了suexec ,否則,這些指令設(shè)置的權(quán)限將被CGI腳本所繼承。
MaxRequestsPerChild指令用于控制服務(wù)器建立新進(jìn)程和結(jié)束舊進(jìn)程的頻率。
StartServers 指令
StartServers指令設(shè)置了服務(wù)器啟動(dòng)時(shí)建立的子進(jìn)程數(shù)量。
因?yàn)樽舆M(jìn)程數(shù)量動(dòng)態(tài)的取決于負(fù)載的輕重,所有一般沒有必要調(diào)整這個(gè)參數(shù)。
MinSpareServers 指令
MinSpareServers指令設(shè)置空閑子進(jìn)程的最小數(shù)量。
所謂空閑子進(jìn)程是指沒有正在處理請(qǐng)求的子進(jìn)程。如果當(dāng)前空閑子進(jìn)程數(shù)少于MinSpareServers ,那么Apache將以最大每秒一個(gè)的速度產(chǎn)生新的子進(jìn)程。
只有在非常繁忙機(jī)器上才需要調(diào)整這個(gè)參數(shù)。將此參數(shù)設(shè)的太大通常是一個(gè)壞主意。
MaxSpareServers 指令
MaxSpareServers指令設(shè)置空閑子進(jìn)程的最大數(shù)量。
所謂空閑子進(jìn)程是指沒有正在處理請(qǐng)求的子進(jìn)程。如果當(dāng)前有超過MaxSpareServers數(shù)量的空閑子進(jìn)程,那么父進(jìn)程將殺死多余的子進(jìn)程。
只有在非常繁忙機(jī)器上才需要調(diào)整這個(gè)參數(shù)。將此參數(shù)設(shè)的太大通常是一個(gè)壞主意。如果將該指令的值設(shè)置為比MinSpareServers小,Apache將會(huì)自動(dòng)將其修改成"MinSpareServers+1"。
MaxClients 指令
MaxClients指令設(shè)置了允許同時(shí)伺服的最大接入請(qǐng)求數(shù)量。
任何超過MaxClients限制的請(qǐng)求都將進(jìn)入等候隊(duì)列,直到達(dá)到ListenBacklog指令限制的最大值為止。一旦一個(gè)鏈接被釋放,隊(duì)列中的請(qǐng)求將得到服務(wù)。
對(duì)于非線程型的MPM(也就是prefork),MaxClients表示可以用于伺服客戶端請(qǐng)求的最大子進(jìn)程數(shù)量,默認(rèn)值是256。要增大這個(gè)值,必須同時(shí)增大ServerLimit 。
對(duì)于線程型或者混合型的MPM(也就是beos或worker),MaxClients表示可以用于伺服客戶端請(qǐng)求的最大線程數(shù)量。線程型的beos的默認(rèn)值是50。對(duì)于混合型的MPM默認(rèn)值是16(ServerLimit)乘以25(ThreadsPerChild)的結(jié)果。因此要將MaxClients增加到超過16個(gè)進(jìn)程才能提供的時(shí)候,必須同時(shí)增加ServerLimit的值。
MaxRequestsPerChild 指令
MaxRequestsPerChild指令設(shè)置每個(gè)子進(jìn)程在其生存期內(nèi)允許伺服的最大請(qǐng)求數(shù)量。到達(dá)MaxRequestsPerChild的限制后,子進(jìn)程將會(huì)結(jié)束。如果MaxRequestsPerChild為"0",子進(jìn)程將永遠(yuǎn)不會(huì)結(jié)束。
不同的默認(rèn)值
在mpm_netware和mpm_winnt上的默認(rèn)值是"0"。
將MaxRequestsPerChild設(shè)置成非零值有兩個(gè)好處:
* 可以防止(偶然的)內(nèi)存泄漏無限進(jìn)行,從而耗盡內(nèi)存。
* 給進(jìn)程一個(gè)有限壽命,從而有助于當(dāng)服務(wù)器負(fù)載減輕的時(shí)候減少活動(dòng)進(jìn)程的數(shù)量。
注意:
對(duì)于KeepAlive鏈接,只有第一個(gè)請(qǐng)求會(huì)被計(jì)數(shù)。事實(shí)上,它改變了每個(gè)子進(jìn)程限制最大鏈接數(shù)量的行為。
ThreadsPerChild 指令
這個(gè)指令設(shè)置了每個(gè)子進(jìn)程建立的線程數(shù)。
子進(jìn)程在啟動(dòng)時(shí)建立這些線程后就不再建立新的線程了。如果使用一個(gè)類似于mpm_winnt只有一個(gè)子進(jìn)程的MPM,這個(gè)數(shù)值要足夠大,以便可以處理可能的請(qǐng)求高峰。如果使用一個(gè)類似于worker有多個(gè)子進(jìn)程的MPM,每個(gè)子進(jìn)程所擁有的所有線程的總數(shù)要足夠大,以便可以處理可能的請(qǐng)求高峰。
對(duì)于mpm_winnt,ThreadsPerChild的默認(rèn)值是64;對(duì)于其他MPM是25。
ThreadLimit 指令
這個(gè)指令設(shè)置了每個(gè)子進(jìn)程可配置的線程數(shù)ThreadsPerChild上限。
任何在重啟期間對(duì)這個(gè)指令的改變都將被忽略,但對(duì)ThreadsPerChild的修改卻會(huì)生效。
使用這個(gè)指令時(shí)要特別當(dāng)心。如果將ThreadLimit設(shè)置成一個(gè)高出ThreadsPerChild實(shí)際需要很多的值,將會(huì)有過多的共享內(nèi)存被分配。如果將ThreadLimit和ThreadsPerChild設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動(dòng),或者系統(tǒng)將變得不穩(wěn)定。該指令的值應(yīng)當(dāng)和ThreadsPerChild可能達(dá)到的最大值保持一致。
對(duì)于mpm_winnt,ThreadLimit的默認(rèn)值是1920;對(duì)于其他MPM這個(gè)值是64。
注意:
Apache在編譯時(shí)內(nèi)部有一個(gè)硬性的限制"ThreadLimit 20000"(對(duì)于mpm_winnt是"ThreadLimit 15000"),不能超越這個(gè)限制。
ServerLimit 指令
對(duì)于preforkMPM,這個(gè)指令設(shè)置了MaxClients最大允許配置的數(shù)值。
對(duì)于workerMPM,這個(gè)指令和ThreadLimit結(jié)合使用設(shè)置了MaxClients最大允許配置的數(shù)值。任何在重啟期間對(duì)這個(gè)指令的改變都將被忽略,但對(duì)MaxClients的修改卻會(huì)生效。
使用這個(gè)指令時(shí)要特別當(dāng)心。如果將ServerLimit設(shè)置成一個(gè)高出實(shí)際需要許多的值,將會(huì)有過多的共享內(nèi)存被分配。如果將ServerLimit和MaxClients設(shè)置成超過系統(tǒng)的處理能力,Apache可能無法啟動(dòng),或者系統(tǒng)將變得不穩(wěn)定。
對(duì)于preforkMPM,只有在需要將MaxClients設(shè)置成高于默認(rèn)值256的時(shí)候才需要使用這個(gè)指令。要將此指令的值保持和MaxClients一樣。
對(duì)于workerMPM,只有在需要將MaxClients和ThreadsPerChild設(shè)置成需要超過默認(rèn)值16個(gè)子進(jìn)程的時(shí)候才需要使用這個(gè)指令。不要將該指令的值設(shè)置的比MaxClients 和ThreadsPerChild需要的子進(jìn)程數(shù)量高。
注意:
Apache在編譯時(shí)內(nèi)部有一個(gè)硬限制"ServerLimit 20000"(對(duì)于preforkMPM為"ServerLimit 200000")。不能超越這個(gè)限制。
就是很多個(gè)IGBT集成在一起
輸入模塊
兩年致力于現(xiàn)代房屋構(gòu)建新模式的轉(zhuǎn)型。在集裝箱創(chuàng)意,集裝箱展臺(tái),集裝箱房屋設(shè)計(jì)上投入了大量的人力物力以期待在市場(chǎng)上取得良好的反響。好的產(chǎn)品好的創(chuàng)意是一個(gè)企業(yè)在社會(huì)上發(fā)展的根本。優(yōu)良的集裝箱制作工藝,在房...
格式:pdf
大?。?span id="qvfzeov" class="single-tag-height">137KB
頁數(shù): 2頁
評(píng)分: 4.3
USB總線是一種新型的串行總線,即插即用、可熱插拔、最多同時(shí)可連接127個(gè)設(shè)備,尤其是USB2.0規(guī)范的提出,使得傳輸速率最高可以達(dá)到480Mbps且具有向下兼容的特征。通過對(duì)USB2.0規(guī)范的研究,結(jié)合實(shí)際工作介紹了基于USB總線的多路輸入輸出模塊設(shè)計(jì)。利用CYPRESS公司的USB2.0控制芯片EZ-USB FX2實(shí)現(xiàn)了USB接口電路設(shè)計(jì),并解決了多個(gè)FPGA之間的通信問題。
格式:pdf
大小:137KB
頁數(shù): 未知
評(píng)分: 4.4
本文介紹了一種基于單片機(jī)的多路模擬量檢測(cè)轉(zhuǎn)換模塊,通過STC89C51單片機(jī)及其他模塊對(duì)電壓、電流和溫度模擬量信號(hào)進(jìn)行采集、轉(zhuǎn)換、發(fā)送等一系列操作處理,實(shí)現(xiàn)模擬量數(shù)據(jù)的采集功能。該模塊作為PLC的模擬量采集模塊應(yīng)用于PLC控制系統(tǒng)中,具有較強(qiáng)的實(shí)用性且在很大程度上降低了成本。