2009年6月30日 星期二

Apache WinNT MPM多執行模組的運作方式

WinNT的MPM模組當中,使用一種稱為「I/O Completion Ports」的技術來處理各執行緒的請求分配,「I/O Completion Ports」中文稱為「I/O完全埠」、「I/O完成通訊埠」或「完成端口」等,也有簡稱IOCP

主要資料可以參考MSDN的兩個網址:




2009年6月22日 星期一

Apache MultiThread多執行緒寫法

在WIN32的Apache中,MPM模組(多進程並發處理模塊)使用多執行緒來處理Request,其中避免單一資源被多個執行緒搶奪,必須使用一些技巧,可以參考MSDN中的Synchronization Objects主題文章(http://msdn.microsoft.com/en-us/library/ms686364(VS.85).aspx),常用的Synchronization Object有下列幾種:Event、Mutex、Semaphore和Waitable Timer。利用Synchronization Objects可以被指定給其中之一的Wait Function,讓這些Thread可以等等,如此避掉單一資源被多個執行緒搶奪。

這些Object的特點如下:
除了這四個物件之外,其他可以用來同步執行緒的物件還有:Change notification、Console input、Job、Memory resource notification、Process、Thread等。

這裡還沒有提到一點,為了讓執行緒可以停下來等同步,我們必須使用Wait Function這個功能,Wait Function會在執行的時候block停止住,直到特定的條件(criteria)符合達成才會繼續執行下去,當然你也可以設定一段時間(time-out interval),當條件不符合時,進入等待的狀態,若時間超過則會繼續執行而不等待。


2009年6月12日 星期五

Apache Platform平台運作說明

當我在拆解Apache的同時,發現到一個不能忽略的問題,我們必須將視野提高到較高層次來觀看原始碼(source code),才不會見樹不見林,也較能對Apache的運作有深刻的體悟!樹、林是兩難。

Apache HTTP Server(簡稱Apache)通常在作業系統啟動的時候,就會開始在背後執行,成為 Linux中的Deamon,或是Windows中的Service,有一件事:Apache在啟動的時候,是比較耗費系統資源,所以通常是OS啟動後就Apache提供服務,不太像一般程式,你要用到才去呼叫。

Apache的程式當中分成兩個階段執行,一個是啟動階段(start-up phase),另一個是運行階段(operational pahse)。

啟動階段(start-up phase)的作用有:讀取組態檔(httpd.conf或是.htaccess);載入各個模組(module);初始化系統資源,包含log檔、共享記憶體、資料連結等。

啟動階段完成之後,進入運行階段(operational pahse),運行階段主要由MPM(Multi-Processing Module)模組接管控制,MPM會產生一個或多個的執行緒池(Thread Pool)或是行程(process),像Windows中只會有兩個process(即httpd.exe),其中之一是啟動階段的Master Process,另一個是運行階段的Child Process,由Child Process產生Thread Pool,此後由Thread Pool服務所有的Request請求。主要是因為Windows是支援Multi-Thread的作業系統。