日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

Apache 性能最優(yōu)化分析(4)_Windows教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!
 但這種實(shí)現(xiàn)會(huì)引起嚴(yán)重的饑餓問(wèn)題。由于多個(gè)子進(jìn)程同時(shí)執(zhí)行這個(gè)循環(huán),它們將在select中阻塞。當(dāng)任何socket上出現(xiàn)一個(gè)請(qǐng)求時(shí),所有被阻塞的進(jìn)程將復(fù)蘇,并從select返回(蘇醒進(jìn)程的數(shù)量取決于操作系統(tǒng)和時(shí)間)。它們將繼續(xù)執(zhí)行并試圖接受這個(gè)連接,但只有一個(gè)進(jìn)程會(huì)成功(假設(shè)目前仍只有一個(gè)連接),其余進(jìn)程將阻塞在accept中。這將把所有失敗的進(jìn)程鎖定,使它們只為一個(gè)socket上的請(qǐng)求服務(wù)。它們會(huì)一直被阻塞,直到在那個(gè)socket上出現(xiàn)足夠的請(qǐng)求把它們喚醒。這一饑餓問(wèn)題首先在PR#467被提出。至少有兩種解決它的方法。

  一種方案是使用非阻塞的socket。這種情況下,accept不會(huì)阻塞子進(jìn)程,它們將會(huì)立即返回。但這種方案會(huì)造成CPU時(shí)間的浪費(fèi)。假設(shè)有十個(gè)在select中的空閑進(jìn)程,而后到來(lái)了一個(gè)連接請(qǐng)求。九個(gè)進(jìn)程將蘇醒、試圖接受連接、失敗,并返回select,這些進(jìn)程實(shí)際什么都沒(méi)做。而且如果在這期間,其他socket上出現(xiàn)請(qǐng)求,沒(méi)有哪個(gè)進(jìn)程會(huì)為它服務(wù)�?偠灾@種方案不是十分有效,除非您擁有和空閑子進(jìn)程數(shù)目相當(dāng)?shù)腃PU--恐怕不切實(shí)際。

  另一種方案被Apache采納。這種方案串行化(serialize)對(duì)內(nèi)層循環(huán)的調(diào)用。代碼如下所示(改進(jìn)的部分被加粗顯示):

for (;;) {
accept_mutex_on ();
for (;;) {
fd_set accept_fds;

FD_ZERO (&accept_fds);
for (i = first_socket; i <= last_socket; ++i) {
FD_SET (i, &accept_fds);
}
rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
if (rc < 1) continue;
new_connection = -1;
for (i = first_socket; i <= last_socket; ++i) {
if (FD_ISSET (i, &accept_fds)) {
new_connection = accept (i, NULL, NULL);
if (new_connection != -1) break;
}
}
if (new_connection != -1) break;
}
accept_mutex_off ();
process the new_connection;
}
 
  
accept_mutex_on和accept_mutex_off 兩個(gè)函數(shù)實(shí)現(xiàn)了互斥量(mutual exclusion semaphore),在任意時(shí)刻只能有一個(gè)子進(jìn)程擁有互斥量。多種方法可以實(shí)現(xiàn)互斥量。在src/conf.h(1.3版之前)或src/include/ap_config.h(1.3版及以后)可以作出以下選擇。一些系統(tǒng)不提供任何互斥方法。在這些系統(tǒng)上使用多個(gè)Listen命令是不保險(xiǎn)的。

來(lái)源:網(wǎng)絡(luò)搜集//所屬分類:Windows教程/更新時(shí)間:2013-04-15
相關(guān)Windows教程