當前位置:律師網大全 - 專利申請 - mutexlinux

mutexlinux

詳細全面介紹什麽是Apache服務器?

Apache,壹種開放源碼的HTTP服務器,可以在大多數計算機操作系統中運行,由於其多平臺和安全性(註1)被廣泛使用,是最流行的Web服務器端軟件之壹。它快速、可靠並且可通過簡單的API擴展,Perl/Python等解釋器可被編譯到服務器中。

歷史

Apache

起初由Illinois大學Urbana-Champaign的國家高級計算程序中心開發。此後,Apache

被開放源代碼團體的成員不斷的發展和加強。Apache

服務器擁有牢靠可信的美譽,已用在超過半數的因特網站中-特別是幾乎所有最熱門和訪問量最大的網站。

開始,Apache只是Netscape網頁服務器(現在是Sun

ONE)的之外的開放源代碼選擇。漸漸的,它開始在功能和速度。超越其他的基於Unix的HTTP服務器。1996年4月以來,Apache壹直是

Internet上最流行的HTTP服務器:1999年5月它在57%的網頁服務器上運行;到了2005年7月這個比例上升到了69%。

者宣稱因為這個名字好記才在最初選擇它,但是流傳最廣的解釋是(也是最顯而易見的):這個名字來自這麽壹個事實:當Apache在1995年初開發的時

候,它是由當時最流行的HTTP服務器NCSAHTTPd1.3的代碼修改而成的,因此是“壹個修補的(a

patchy)”服務器。然而在服務器官方網站的FAQ中是這麽解釋的:“‘Apache’這個名字是為了紀念名為Apache(印地語)的美洲印第安人

土著的壹支,眾所周知他們擁有高超的作戰策略和無窮的耐性”。無論怎麽樣,Apache2.x分支不包含任何NCSA的代碼。

特性

Apache

支持許多特性,大部分通過編譯的模塊實現。這些特性從服務器端的編程語言支持到身份認證方案。壹些通用的語言接口支持Perl,Python,Tcl,

和PHP。流行的認證模塊包括mod_access,mod_auth和mod_digest。其他的例子有SSL和TLS支持

(mod_ssl),proxy模塊,很有用的URL重寫(由mod_rewrite實現),定制日誌文件

(mod_log_config),以及過濾支持(mod_include和

mod_ext_filter)。Apache日誌可以通過網頁瀏覽器使用免費的腳本AWStats或Visitors來進行分析。

2.x版本

Apache的2.x版本核心在Apache1.x版本之上作出了重要的加強。這包括:線程,更好的支持非UNIX平臺(例如Windows),新的ApacheAPI,以及IPv6支持。

評價

《PCMagazine》2004年8月評出了近30年以來的10款最佳軟件產品。

他們其中或者是有過最輝煌的歷史,或者是最具創意。其對apache的評價是:第三名:Apache(阿帕奇,1995年推出)Apache目前已經演變

成了“LAMP”,即Linux、Apache、MySQL和PHP的聯合體。這是壹個開放源代碼軟件項目,已經對微軟的“.NET”戰略構成嚴重威脅。

尤其是Apache網絡服務器,讓用戶充分體驗到開發源碼軟件的穩定性、可靠性和可定制性。

Apple.com評價apache時

說:Apache是服務器軟件始終不斷進化的大塊部件,它免費但又是無價之寶。Apache

是在資源開放運動中出現的絕對珍品,因為不屬於個人專利而是對公***免費。壹旦擁有這些源碼,程序員能夠自由完成所想——能在其它程序員接替工作時被賦予同

樣的權限來改變和修改自己的源代碼。

註釋

盡管不斷有新的漏洞被發現,但由於其OpenSource的特點,漏洞總能被很快修補。因此總的來說,其安全性還是相當高的。

()AddHandlercgi-script.cgi

AddHandlerserver-parsed.shtml

Sethandlercgi-script

AddHandler定義了何種擴展名用那壹個字符串進行描述.

SetHandler把壹個目錄下的文件都指定用這壹個字符串描述.

我在這裏提到的命令都是與其結構密切相關的.Handler和Type的關系在下面會描述的.許多的東東從外面是看不清楚的,下面,我們從裏面看.

三程序的基本結構

-----------------

Apache有非常好的跨平臺性.為了實現這壹目標和簡化模塊編寫者的負擔,Apache完成了許多基本的功能如IO,內存分配等,這些接口都是與具體平臺無關的.還有壹些很有用的例程如:hashtable,array等.在整個體系中,Apache有壹個基本點,它盡可能的使用簡單的結構和算法,這不僅易於理解和維護,還提高了它的穩定性.

UNIX系統上,Apache采用了多進程模型,在Window上采用了多線程模型.多進程模型中,其子進程處理客戶請求,

父進程用於管理子進程.當系統過載時父進程會再啟動幾個子進程,當系統空閑時,父進程會殺掉幾個子進程.

子進程的數目在"MinSpareServers"和"MaxSpareServers"之間.而且,每個子進程處理的請求個數也是有限制的,

這可以解決諸如內存泄漏等問題.所有的進程狀態都被記錄在sharememory中.由於每個進程的狀態記錄在其中的壹小塊內存上,

它通常也只讀寫這壹塊內存,因此,Apache沒有使用什麽同步機制.

在RichardSteve的書上說到的幾種多進程服務器模型,Apache都使用了,在不同的系統上根據其特點選擇使用不同的方法:

1.accept:

在accept處阻塞,只有在accept是在內核級實現的才行.

2.select:

在select處阻塞.

3.mutex/lock_file:

使用mutex或lock_file來進行對accpet進行互斥.

種方法都要求進行阻塞,區別在於阻塞與不同的地方.前兩種方法都會由所謂的巨群問題:多個阻塞在同壹個資源上的進程被同時喚醒引發再次競爭.

不過,按RichardSteve的評測,第壹種方法最快,第二種其次,第三種最慢.其實,在linux上第三種方法也會有巨群問題.

Apache雖然並不強調性能,這並不意味著他們不重視性能.而是Apache認為在Server端realiable才是第壹位的.但Apache的性能還是不錯的.

請求30次redis和請求30次數據庫哪個更快?

純內存數據庫,如果只是簡單的key-value,內存不是瓶頸。壹般情況下,hash查找可以達到每秒數百萬次的數量級。瓶頸在於網絡IO上。

根據妳測的的10000/s來看,客戶端和redis應該是部署在兩臺不同的機器,並且是使用同步的方式請求redis.每次請求需要通過網絡把請求發送到redis所在的機器,然後等待redis返回數據。

時間大部分消耗在網絡傳輸中。

如果把redis和客戶端放在同壹臺機器,網絡延遲會更小,壹般情況下可以打到60000次每秒甚至更高,取決於機器性能。

鎖不是影響性能的主要因素。

線程鎖(mutex_lock)只有在遇到沖突的情況下性能會下降,而正常情況下,遇到沖突的概率很低。

如果只是簡單的加鎖、釋放鎖速度是非常快的,每秒鐘上千萬次沒問題。

memcache內部用到了大量的鎖,並沒有見到性能降低。

線程也不是影響吞吐量的重要因素。

如第壹點來說,壹般情況下,程序處理內存數據的速度遠高於網卡接收的速度。

使用線程好處是可以同時處理多條連接,在極端情況下,可能會提高響應速度。

使用epoll或libevent等因為異步非阻塞IO編程只能這麽做。

與之對應的是同步阻塞IO編程,使用多進程或多線程實現多條連接的處理,比如apache。

壹般情況下,異步非阻塞IO模型性能是遠高於同步阻塞IO模型的,可以參考nginx與apache性能的對比。

libevent並不比redis自己實現的ae_event慢,代碼多是應為ae_event只實現了redis需要的功能,而libevent則具有更多的功能,比如更快的定時器、bufferevent模型,甚至自帶了DNS、HTTP協議的處理。

並且libevent更通用,而redis只專註於linux平臺。最後題主問題,快在哪?

1、純內存操作2、異步非阻塞IO

如何使用Linux提供的信號量來實現進程的互斥和同步?

設互斥信號量mutex初值為1,進程執行操作前P(mutex),操作完成後V(mutex)。P操作使mutex減1,如果mutex

(以前過的關於PV操作的答案壹個,妳看看有用沒)

  • 上一篇:蘋果向華為支付專利費
  • 下一篇:現在nft市場怎麽樣?
  • copyright 2024律師網大全