ACE框架解讀 - 源碼篇

最近研究了ACE框架的源碼,先考慮選取最新版本ACE6.0來讀,但是發現代碼量有30多萬行,規模太大了花的時間會比較多,所以考慮選取舊一些的版本,最後選取ACE4.5版本來閱讀,代碼量13萬行比較適中。

下面是我讀代碼時的一些總結,把所有的目錄和文件列出來,並針對每個文件裏的主要類及其實現,根據自己的理解作了一些總結。

文件

總結

[CORBA]

COBRA整體略過。

CORBA_Handler.cpp

CORBA_Handler.h

CORBA_Handler.i

 

CORBA_Ref.cpp

CORBA_Ref.h

CORBA_Ref.i

 

[Collections]

 

Array.cpp

Array.h

Array.i

普通數組類,封裝了數組相關操作。

Containers.cpp

Containers.i

Containers.h

節點類:單向鏈表節點、雙向鏈表節點。

容器類:動態數組棧、靜態數組棧、動態鏈表棧、動態鏈表隊列、雙向鏈表、動態鏈表鍵、靜態數組鍵、動態數組鍵、有序雙向鏈表鍵。

迭代器類:動態鏈表棧迭代器、動態鏈表隊列迭代器、雙向鏈表迭代器、動態鏈表鍵迭代器、靜態數組鍵迭代器、動態數組鍵迭代器、有序雙向鏈表鍵迭代器。

Hash_Map_Manager.cpp

Hash_Map_Manager.h

哈希表關聯數組類,使用哈希表存儲對象並索引鍵值,哈希表每個節點使用一個環形鏈表來存儲衝突的對象,還實現了一個正向和反向的迭代器。

Filecache.cpp

Filecache.h

文件讀寫管理類,實現了讀對象的共享,用讀寫鎖來控制文件讀寫併發,用哈希表來索引同一個文件的多個讀寫對象。

ACE_Filecache類的成員變量stale_處理邏輯有問題,且未被其他類使用。

Free_List.cpp

Free_List.i

Free_List.h

預分配待使用鏈表抽象基類,包含高低水位標誌,保持鏈表節點保持不高於高水位,當低於低水位時再次分配一定數量的節點。

Managed_Object.cpp

Managed_Object.h

Managed_Object.i

對象模板抽象基類,包含獲取對象接口和釋放接口。

Map_Manager.cpp

Map_Manager.h

Map_Manager.i

普通關聯數組類,使用數組來存儲對象,也實現了一個正向和反向的迭代器。

Object_Manager.cpp

Object_Manager.i

Object_Manager.h

對象管理類,生成一批靜態鎖對象,供其他類使用,同時也可以生成一些單件鎖對象,供單件對象使用,並且管理這些鎖對象的創建與釋放。

SString.cpp

SString.h

SString.i

字符串類,封裝了字符串對象的系列操作。

單詞類,把一個長字符串分割成一個個單詞來返回。

[Concurrency]

 

Activation_Queue.cpp

Activation_Queue.h

方法對象隊列類,對消息隊列做了少量封裝。

Atomic_Op.i

 

Future.cpp

Future.h

異步操作結果類,對異步操作結果進行的通用性封裝,還包含了多一個結果引用同一個實際對象的引用相關處理。

Method_Object.cpp

Method_Object.h

方法對象基類,定義了一個方法對象的空殼。

Process.cpp

Process.h

Process.i

進程類,封裝了操作系統進程相關操作,以及進程環境變量和參數。

Process_Manager.cpp

Process_Manager.h

Process_Manager.i

進程描述類,描述id和組id等信息,用來表示一個進程。

進程管理類,封裝了線程的創建及後續生命期的相關操作及管理。

Sched_Params.cpp

Sched_Params.h

Sched_Params.i

優先級參數類,封裝了線程、進程優先級參數的相關操作。

Synch.cpp

Synch.h

Synch.i

同步對象類,封裝了一系列線程、進程間通信對象,如:互斥鎖、記錄鎖、信號量、讀寫鎖、條件變量、守衛(對象離開生存期自動釋放)、等待事件(Win32)、遞歸鎖、柵欄(指定數量的對象都處於等待狀態後才繼續運行)。

自動事件:當處於Signal狀態時,只有一個等待該事件的線程會被喚醒,之後事件會被自動回到Non Signal狀態。

手動事件:當處於Signal狀態時,所有等待該事件的線程都會被喚醒,之後需要調用ResetEvent把Event對象調回到Non Signal狀態。

Synch_Options.cpp

Synch_Options.h

Synch_Options.i

同步參數類,封裝了同步參數對象的設置和獲取相關操作。

Synch_T.cpp

Synch_T.h

Synch_T.i

同步對象模板類,包括:

鎖適配器類,在鎖基礎上封裝了一層標準操作。

標誌位類,封裝了對標誌位的置位和測試操作。

算術操作類,封裝了對象的算術操作。

線程專有存儲類,封裝了線程專有存儲機制。

守衛類,封裝了對同步對象的的相關操作,以及對象離開生存期自動釋放機制。

條件變量類,封裝了條件對象相關機制。

Thread.cpp

Thread.h

Thread.i

線程類,封裝了操作系統線程相關的操作,都是靜態成員函數,供需要進行線程操作的程序使用。

Thread_Manager.cpp

Thread_Manager.h

Thread_Manager.i

線程描述類,包含了線程id及相關信息,用來表示一個線程。

線程管理類,負責線程的創建及後續整個線程生命期的管理。

線程適配類(ACE_Thread_Adapter),對線程入口函數進行的封裝。

Token.cpp

Token.h

Token.i

增強型同步類,多個服務獲取鎖時處於等待狀態,採用隊列結構來存儲這些服務,然後按FIFO方式來喚醒這些隊列中的服務。

[Config]

 

config.h

 

Basic_Types.cpp

Basic_Types.h

Basic_Types.i

定義了一種無符號128bit寬度的數據類型。

Version.h

 

[Connection]

 

Acceptor.cpp

Acceptor.h

Acceptor.i

接受器工廠類,對接受對象進行了封裝,結合反應器,形成服務對象的概念,能夠調用接受對象進行實際的接受連接動作,並且能夠掛載到反應器上進行處理,同時滿足服務對象的掛起、恢復、啓動、停止等動作。

策略接受器工廠類,對接受器的創建、接受、激活、調度等動作委託到相應的策略類進行處理。

單連接接受工廠類,只接受一個連接的接受器類。

Asynch_Acceptor.cpp

Asynch_Acceptor.h

Asynch_Acceptor.i

異步接收器工廠類,結合前攝器,實現異步接受連接相關的處理。

Asynch_IO.cpp

Asynch_IO.h

Asynch_IO.i

在前攝器模式中使用

異步操作結果基類,定義了異步操作結果包含的基本要素和操作接口。

異步操作基類,定義了異步操作的基本接口。

異步流讀類,定義了異步流讀接口以及相應的完成處理。

異步流寫類,定義了異步流寫接口以及相應的完成處理。

異步文件讀類,定義了異步文件讀接口以及相應的完成處理。

異步文件寫類,定義了異步文件寫接口以及相應的完成處理。

異步接收類,定義了異步接收接口以及相應的完成處理。

異步文件傳輸類,定義了異步文件傳輸接口以及相應的完成處理。

句柄類,定義了接受到異步操作完成結果後的操作接口。

服務句柄類,定義了異步接受操作完成後的操作接口。

Connector.cpp

Connector.h

Connector.i

連接工廠類,對連接對象進行封裝,結合反應器,形成服務對象的概念,能夠創建連接對象並且連接到對端,當採用非阻塞IO時,能把連接句柄掛載到反應器上,並在自身內部映射表保存一個條目,當非阻塞IO操作完成時,通過反應器回調處理函數到映射表找到那個條目,進而完成處理。

策略連接工廠類,把連接器的創建、連接、激活等動作委託到相應的策略類進行處理。

Dynamic_Service.cpp

Dynamic_Service.h

Dynamic_Service.i

動態服務類,定義了通過一個名稱在服務容器查找到相應的服務,進而返回關聯在服務上的服務對象。

Strategies.cpp

Strategies.h

Strategies.i

通知策略基類,定義了通知策略的基本接口。
反應器通知策略類,定義了通知反應器的策略的基本接口。

連接重利用策略類,定義了連接重利用策略的基本接口。

Strategies_T.cpp

Strategies_T.h

Strategies_T.i

重利用策略類,定義了服務對象的連接重利用策略的分配和啓動接口。

創建策略類,定義了服對象務的創建接口。
單件模式創建策略類,定義了服務對象的單件模式創建操作。

動態鏈接模式創建策略類,定義了服務對象在動態鏈接庫情況下的創建操作。

併發策略類,定義了服務對象的併發激活接口。
反應器併發策略類,定義了服務對象依託反應器情況下的激活操作。

多線程併發策略類,定義了服務對象在多線程情況下的激活操作。

多進程併發策略類,定義了服務對象在多進程情況下的激活操作。

接受器策略類,定義了被動連接接受器的接受動作接口。

連接器策略類,定義了主動連接器的連接動作接口。
調度策略類,定義了服務對象掛起、恢復調度接口。
哈希地址類,定義了地址對象的哈希計算和比較接口。
連接緩存類,能夠調用創建策略類創建服務對象,然後調用併發策略類激活對象,然後將對象緩存在內部哈希表中,最後調用重利用策略類分配連接重利用策略,並支持相關的重利用動作。

反應器調度策略類,定義了依託反應器情況下的服務對象掛起、恢復調度操作。

多線程調度策略類,定義了多線程情況下的服務對象掛起、恢復調度操作。

Svc_Handler.cpp

Svc_Handler.h

Svc_Handler.i

連接服務基類,用於跟連接對端進行數據交互,爲此定義了一些接口和基本機制,並支持重利用。

[IPC]

 

[IPC/IO_SAP]

 

IO_SAP.cpp

IO_SAP.h

IO_SAP.i

IO類型對象基類,定義了各類IO對象的基本行爲。

[IPC/IO_SAP/DEV_SAP]

 

DEV.cpp

DEV.h

DEV.i

設備基類,定義了設備的基本行爲。

DEV_Connector.cpp

DEV_Connector.h

DEV_Connector.i

客戶端設備類,定義了設備類型的客戶端連接操作。

DEV_IO.cpp

DEV_IO.h

DEV_IO.i

設備類,定義了設備的數據收發操作。

TTY_IO.cpp

TTY_IO.h

串口類,定義了串口類型設備的控制操作。

[IPC/IO_SAP/FILE_SAP]

 

FILE.cpp

FILE.h

FILE.i

文件基類,定義了文件類型對象的通用操作。

FILE_Connector.cpp

FILE_Connector.h

FILE_Connector.i

客戶端文件類,定義了文件的打開操作。

FILE_IO.cpp

FILE_IO.h

FILE_IO.i

文件類,定義了文件的相關收發操作。

[IPC/IPC_SAP]

 

IPC_SAP.cpp

IPC_SAP.h

IPC_SAP.i

進程間通信基類,定義了進程間通信對象的基本行爲。

[IPC/IPC_SAP/Addr]

 

Addr.cpp

Addr.h

Addr.i

地址基類,定義地址對象的基本行爲。

DEV_Addr.cpp

DEV_Addr.h

DEV_Addr.i

設備地址類,定義設備地址對象的相關行爲。

FILE_Addr.cpp

FILE_Addr.h

FILE_Addr.i

文件地址類,定義了文件地址對象的相關行爲。

INET_Addr.cpp

INET_Addr.h

INET_Addr.i

套接字地址類,定義了套接字地址對象的相關行爲。

SPIPE_Addr.cpp

SPIPE_Addr.h

SPIPE_Addr.i

流管道地址類,定義了流管道地址對象的相關行爲。

UNIX_Addr.cpp

UNIX_Addr.h

UNIX_Addr.i

UNIX套接字地址類,定義了UNIX套接字地址對象的相關行爲。

UPIPE_Addr.h

 

[IPC/IPC_SAP/FIFO_SAP]

 

FIFO.cpp

FIFO.h

FIFO.i

有名管道類,定義有名管道對象的創建銷燬操作。

FIFO_Recv.cpp

FIFO_Recv.h

FIFO_Recv.i

有名管道接受端類,定義有名管道對象的接收操作。

FIFO_Recv_Msg.cpp

FIFO_Recv_Msg.h

FIFO_Recv_Msg.i

有名管道接受端增強類,定義有名管道對象的接收操作。

FIFO_Send.cpp

FIFO_Send.h

FIFO_Send.i

有名管道發送端類,定義有名管道對象的發送操作。

FIFO_Send_Msg.cpp

FIFO_Send_Msg.h

FIFO_Send_Msg.i

有名管道發送端增強類,定義有名管道對象的發送操作。

[IPC/IPC_SAP/SOCK_SAP]

 

LOCK_SOCK_Acceptor.cpp

LOCK_SOCK_Acceptor.h

 

LSOCK.cpp

LSOCK.h

LSOCK.i

本地套接字類,用來傳遞文件描述符。

LSOCK_Acceptor.cpp

LSOCK_Acceptor.h

LSOCK_Acceptor.i

本地流套接字服務端,定義了本地套接字服務器行爲。

LSOCK_CODgram.cpp

LSOCK_CODgram.h

LSOCK_CODgram.i

本地連接數據報套接字類,定義本地帶連接的數據報套接字的操作。

LSOCK_Connector.cpp

LSOCK_Connector.h

LSOCK_Connector.i

本地流套接字客戶端,定義了本地套接字客戶器行爲。

LSOCK_Dgram.cpp

LSOCK_Dgram.h

LSOCK_Dgram.i

本地數據報套接字,定義了本地數據報套接字相關行爲。

LSOCK_Stream.cpp

LSOCK_Stream.h

LSOCK_Stream.i

本地流套接字基類,定義了本地流套接字基本行爲。

SOCK.cpp

SOCK.h

SOCK.i

套接字基類,定義套接字對象的基本行爲。

SOCK_Acceptor.cpp

SOCK_Acceptor.h

SOCK_Acceptor.i

流套接字服務端類,定義了流套接字服務端的行爲。

SOCK_CODgram.cpp

SOCK_CODgram.h

SOCK_CODgram.i

連接數據報套接字類,定義帶連接的數據報套接字的操作。

SOCK_Connector.cpp

SOCK_Connector.h

SOCK_Connector.i

流套接字客戶端類,定義流套接字客戶端的行爲。

SOCK_Dgram.cpp

SOCK_Dgram.h

SOCK_Dgram.i

數據報套接字,定義了數據報套接字相關行爲。

SOCK_Dgram_Bcast.cpp

SOCK_Dgram_Bcast.h

SOCK_Dgram_Bcast.i

數據報廣播套接字,定義了數據報廣播套接字的相關行爲。

SOCK_Dgram_Mcast.cpp

SOCK_Dgram_Mcast.h

SOCK_Dgram_Mcast.i

數據報多播套接字,定義了數據報多播套接字的相關行爲。

SOCK_IO.cpp

SOCK_IO.h

SOCK_IO.i

套接字IO操作基類,定義了套接字對象的基本IO操作。

SOCK_Stream.cpp

SOCK_Stream.h

SOCK_Stream.i

流式套接字基類,定義了流式套接字基本行爲。

[IPC/IPC_SAP/SPIPE_SAP]

 

SPIPE.cpp

SPIPE.h

SPIPE.i

流管道基類,定了流管道的創建銷燬行爲。

SPIPE_Acceptor.cpp

SPIPE_Acceptor.h

SPIPE_Acceptor.i

流管道服務端類,定義了流管道服務端的行爲。

SPIPE_Connector.cpp

SPIPE_Connector.h

SPIPE_Connector.i

流管道客戶端類,定義了流管道客戶端的行爲。

SPIPE_Stream.cpp

SPIPE_Stream.h

SPIPE_Stream.i

流管道IO操作類,定義了流管道IO相關操作。

[IPC/IPC_SAP/TLI_SAP]

 

TLI.cpp

TLI.h

TLI.i

TLI對象基類,定義了TLI對象的創建銷燬行爲。

TLI_Acceptor.cpp

TLI_Acceptor.h

TLI_Acceptor.i

TLI對象服務端類,定義了TLI對象服務端的行爲。

TLI_Connector.cpp

TLI_Connector.h

TLI_Connector.i

TLI對象客戶端類,定義了TLI對象客戶端的行爲。

TLI_Stream.cpp

TLI_Stream.h

TLI_Stream.i

TLI對象IO操作類,定義了TLI對象IO相關操作。

[IPC/UPIPE_SAP]

 

UPIPE_Acceptor.cpp

UPIPE_Acceptor.h

UPIPE_Acceptor.i

無連接管道服務端類,定義了無連接管道服務端的行爲。

UPIPE_Connector.cpp

UPIPE_Connector.h

UPIPE_Connector.i

無連接管道客戶端類,定義了無連接管道客戶端的行爲。

UPIPE_Stream.cpp

UPIPE_Stream.h

UPIPE_Stream.i

無連接管道IO操作類,定義了無連接管道IO相關操作。

[IPC/Utils]

 

IOStream.cpp

IOStream.h

流緩衝區類,基於標準庫類streambuf基礎上增強。
需要先了解標準庫類streambuf的行爲才能理解這個類,所以暫時未讀懂。

這個類未被其他類使用。

IOStream_T.cpp

IOStream_T.h

IOStream_T.i

流讀寫類,在標準庫的基礎上定義了流讀寫相關操作。

Pipe.cpp

Pipe.h

Pipe.i

無名管道類,定義了無名管道的基本操作。

Signal.cpp

Signal.h

Signal.i

信號機制管理類,定義了一系列類包括:

信號集類,負責信號集相關的處理操作。

信號註冊類,負責註冊信號及其處理函數。

信號處理函數管理類,負責信號處理函數的統一入口分派。

信號處理函數類,負責具體對應某個信號的信號處理函數封裝。

信號處理函數增強管理類,負責信號處理函數的統一入口分派,並且對於一個信號能夠註冊多個信號處理函數,在捕獲到信號時能夠一一被調用。

[Logging and Tracing]

 

Dump.cpp

Dump.h

對象dump管理類,負責統一管理各類對象對應的dump類。

Dump_T.cpp

Dump_T.h

dump泛型類,對抽象的dump類泛型化,以適應不同類型的對象。

Log_Msg.cpp

Log_Msg.h

Log_Msg.i

日誌管理類,負責日誌的格式化整理以及相關控制操作,以及輸出到標準輸出、遠程日誌服務器、流對象上。

Log_Priority.h

 

Log_Record.cpp

Log_Record.h

Log_Record.i

日誌記錄類,定義了一條日誌記錄相關信息及其操作。

Trace.cpp

Trace.h

Trace.i

函數調用跟蹤類,負責打印每個函數的調用時的進入以及離開日誌。

[Memory]

 

[Memory/Mem_Map]

 

Mem_Map.cpp

Mem_Map.h

Mem_Map.i

共享內存基類(ACE_Mem_Map),封裝定義了共享內存相關操作和機制。

[Memory/Shared_Malloc]

 

Malloc.cpp

Malloc.h

Malloc.i

內存管理基類,包括:

1、動態內存分配基類(ACE_New_Allocator/ACE_Allocator),定義了系統動態內存分配相關操作。

2、靜態線性內存分配基類(ACE_Static_Allocator_Base),初始靜態分配一段內存,應用申請內存時從中移位獲取,並且申請後不再釋放。

Malloc_T.cpp

Malloc_T.h

Malloc_T.i

內存管理類,包括:

1、對象內存分配類(ACE_Cached_Allocator),一個以free list類結構爲基礎構造的內存分配類,每次從鏈表中取出或返還一個內存塊。

2、線性內存分配類(ACE_Malloc),以環形鏈表爲數據結構,每個節點包含一個內存塊,每次從鏈表中取出或返回內存塊;並且可以把一個名稱綁定到一個地址上,形成一個名稱鏈表,通過名稱來查找地址;還有一個迭代器用來索引名稱鏈表。

Memory_Pool.cpp

Memory_Pool.h

Memory_Pool.i

內存池管理類,包括:

1、本地內存池類(ACE_Local_Memory_Pool),使用系統動態內存接口來申請內存。

2、共享內存池類(ACE_MMAP_Memory_Pool),使用共享內存機制來申請內存。

3、System_V風格共享內存池類(ACE_Shared_Memory_Pool),使用System_V共享內存機制來申請內存,略過。

[Memory/Shared_Memory]

 

Shared_Memory.cpp

Shared_Memory.h

共享內存外覆基類(ACE_Shared_Memory),在ACE_Mem_Map基礎上封裝了一層。

Shared_Memory_MM.cpp

Shared_Memory_MM.h

Shared_Memory_MM.i

共享內存外覆類(ACE_Shared_Memory_MM),在ACE_Mem_Map基礎上封裝了一層。

Shared_Memory_SV.cpp

Shared_Memory_SV.h

Shared_Memory_SV.i

System_V風格共享內存類(ACE_Shared_Memory_SV),略過。

[Memory/Utils]

 

Obstack.cpp

Obstack.h

Obstack.i

內存管理類(ACE_Obstack),分配和管理包含頭信息(ACE_Obchunk)的內存塊,並以鏈表形式來組織內存塊。

Read_Buffer.cpp

Read_Buffer.h

Read_Buffer.i

流讀取類(ACE_Read_Buffer),從流中讀取一段數據,並把搜索到的字符替換成替換字符。

[Misc]

 

ARGV.cpp

ARGV.h

ARGV.i

參數類,參數有字符串、數組、隊列三種存儲格式,並完成之間的相互轉換。

Auto_Ptr.cpp

Auto_Ptr.h

Auto_Ptr.i

智能指針類。

Date_Time.cpp

Date_Time.h

Date_Time.i

日期時間類。

Dynamic.cpp

Dynamic.h

Dynamic.i

對象動態分配標誌類,在一個類的new操作符函數裏置位動態分配標誌,然後在這個類的構造函數裏檢查這個標誌位並保存,後面在這個類的destory函數里根據標誌來決定是否釋放對象。

便於當某個對象被其他對象管理,而管理對象統一通過destory接口釋放這個對象時,能夠根據這個對象是動態分配對象,還是全局對象進行不同的釋放操作。

Get_Opt.cpp

Get_Opt.h

Get_Opt.i

入參解析類,完成C庫函數getopts相類似的功能。
ACE_Get_Opt::operator ()處理邏輯有問題。

Registry.cpp

Registry.h

註冊表管理類,能夠對註冊表內鍵和項兩種結構進行相關操作,還定義了一個迭代器可以對管理類進行遍歷操作,生成鍵和項兩種類型節點的列表,迭代器內還包含獨立的鍵迭代器和項迭代器。

Singleton.cpp

Singleton.h

Singleton.i

單件類,提供靜態實例化函數在第一次被調用動態創建對象,並且註冊到對象管理類,使得對象管理類能負責它的釋放。

System_Time.cpp

System_Time.h

時間類,能夠獲取本地時間或者系統時間。

[Name_Service]

 

Local_Name_Space.cpp

Local_Name_Space.h

名字和名字值類型類,定義了名字和值類型對象封裝類,以及與字符串對象的相互轉換操作,用於映射。

Local_Name_Space_T.cpp

Local_Name_Space_T.h

名字空間映射類,基於哈希表關聯數組類的數據結構,關聯的對象是名字類以及名字值類型類,同時包含了對數據結構的相關操作。

本地名字空間類,創建一個本地數據庫以及對應的名字空間映射對象,兩者之間的同步機制沒有實現,然後能夠基於這個名字空間映射對象進行名字、名字值、名字類型相互之間的綁定、解綁定、查找等操作。

Name_Proxy.cpp

Name_Proxy.h

名字服務代理類,完成與對端服務器的名字請求與響應交互動作,用於遠端名字服務的客戶端。

Name_Request_Reply.cpp

Name_Request_Reply.h

名字請求、響應類,定義了客戶端和名字服務器間交互的請求和響應對象結構,以及相應的編解碼等操作。

Name_Space.cpp

Name_Space.h

名字空間基類,定義了名字、值、類型三者之間的對應關係集,以及針對這個集的綁定、解綁定、獲取等操作接口,沒有定義實際數據成員。

Naming_Context.cpp

Naming_Context.h

名字空間上下文服務類,作爲服務對象,能夠獨立完成入參解析,並根據名字空間類型:本進程、本機、遠程,分別把名字空間相關操作委託給實際的名字空間派生類處理,用於給用戶提供名字服務。

Registry_Name_Space.cpp

Registry_Name_Space.h

註冊表名字空間類,採用註冊表來存儲名字和名字值,然後完成名字、名字值、名字類型相互之間的綁定、解綁定、查找等操作。

Remote_Name_Space.cpp

Remote_Name_Space.h

遠端名字空間類,調用名字服務代理類,構造請求發向遠端名字服務器,接受響應並解析,來完成名字、名字值、名字類型相互之間的綁定、解綁定、查找等操作。

[OS Adapters]

 

ACE.cpp

ACE.h

ACE.i

包含了一些操作系統API的接口封裝。

OS.cpp

OS.h

OS.i

包含了各ACE類中需要調用操作系統API的函數的實現,以及一些操作系統API的接口封裝。

[Reactor]

 

Event_Handler.cpp

Event_Handler.h

Event_Handler.i

事件基類,定義了各類事件處理的基類接口。

Event_Handler_T.cpp

Event_Handler_T.h

Event_Handler_T.i

事件模板類,定義了各類事件處理的接口以及將處理委託到模板對象上。

Handle_Set.cpp

Handle_Set.h

Handle_Set.i

描述符集類,封裝了socket操作的描述符集對象的相關操作。

描述符集迭代器類,能夠在描述符集裏訪問被置位了的描述符。

Priority_Reactor.cpp

Priority_Reactor.i

Priority_Reactor.h

優先級反應器類,相對於select反應器,採用優先級隊列來存儲分派的事件,當事件分派時,根據事件的優先級入隊到相應優先級隊列中,再對各優先級隊列中的所有事件進行出隊分派處理。

Proactor.cpp

Proactor.h

Proactor.i

前攝器類,1、定時器通過schedule_timer創建加入定時器隊列,構造函數啓動獨立線程在函數svc中來輪詢等待定時器隊列中定時器超時,定時器超時處理函數timeout將超時處理消息發給完成端口,前攝器事件處理函數handle_events等待完成端口中的事件,進而執行特定的完成處理。2、當向前攝器註冊一個IO句柄時,把這個句柄關聯到完成端口,從而對這個句柄的IO異步操作立即返回,同時前攝器事件處理函數handle_events等待完成端口中的事件,進而執行相應的IO異步操作完成處理動作。

Reactor.cpp

Reactor.h

Reactor.i

反應器封裝類,封裝了單件反應器對象,並把反應相關接口委託到實際的基於不同算法的反應器對象上。

Reactor_Impl.h

 

Select_Reactor.cpp

Select_Reactor.h

Select_Reactor.i

基於select的反應器類,多線程輪詢並分派事件處理,但是一個時刻只能有一個線程處於輪詢處理狀態,其他線程要能進行輪詢處理需要使用owner()方法設置所有者線程。

反應器同步類(ACE_Select_Reactor_Token),負責當其他線程調用反應器接口時,爲了保證對反應器共享數據的同步訪問,先通過sleep_hook接口給反應器主線程發一個通知消息,讓反應器主線程暫時讓出鎖,從而得到執行的機會,反應器主線程在讓出鎖的同時,把自己放入token的隊列並等待鎖,使得其他線程完成處理後能夠再拿到鎖繼續執行。

反應器事件通知類(ACE_Select_Reactor_Notify),封裝了反應器的事件通知處理機制,底層通過管道來實現,包括通知事件的寫入管道和在反應器主循環輪詢去讀這個管道,拿到事件後的分配處理。

反應器事件管理類(ACE_Select_Reactor_Handler_Repository),負責管理事件句柄和事件處理類之間的映射關係,以及相關的查詢、綁定、解綁定等操作。

反應器類(ACE_Select_Reactor),包含主循環會輪詢和分派處理各種事件,包括處理定時器超時事件,通知事件,以及IO端口消息事件。當分派處理IO端口事件時,調用用戶的處理函數處理,如果返回值大於0,則把事件保存在ready_set,這樣循環下次運行時可以不用經過select操作再次分派處理。

WFMO_Reactor.cpp

WFMO_Reactor.h

WFMO_Reactor.i

基於Win32 WaitForMultipleObjects的反應器類,多個線程同時輪詢並分派處理事件,反應器本身不提供事件分派處理的同步,需要業務應用來提供自己的同步機制。

反應器事件管理類(ACE_WFMO_Reactor_Handler_Repository),負責管理事件句柄和事件處理類之間的映射關係,以及相關的綁定、解綁定、掛起、恢復等操作,同時因爲多線程併發,所以對於這些事件操作改變不立即生效,而是分隊列存儲,等待反應器在合適時機來將改變生效。

反應器事件通知類(ACE_WFMO_Reactor_Notify),負責爲反應器定時器提供實現機制,通過把自身註冊到反應器的監測事件隊列中去,定時器啓動時把超時處理打包成消息入自身隊列,同時給出信號,反應器收到信號後調用通知類處理函數,處理函數從自身隊列拿出消息,觸發事件超時處理。

反應器類(ACE_WFMO_Reactor),將同步事件、通知事件、已被註冊的事件列表註冊到監聽隊列,可以觸發多個線程在各自的事件處理函數中各自監測各類事件,並根據事件不同類型進行相應的分派,分派完成後,由一個主線程對分派過程中監測隊列中的改變進行處理生效,其他線程略過。

Msg_WFMO_Reactor.cpp

Msg_WFMO_Reactor.h

Msg_WFMO_Reactor.i

增強型反應器類,相對於WFMO反應器,能夠對Windows消息進行探測,以及進行相應的翻譯分發處理。

XtReactor.cpp

XtReactor.h

X工具庫反應器類,相對於select反應器做了如下改變:

1、事件等待採用XtAppProcessEvent。

2、定時器操作時通過XtAppAddTimeOut附加上了自己的一套處理函數。

3、增加監測事件時,通過XtAppAddInput增加了一套快速監測併發派處理的機制。

[Service_Configurator]

 

Parse_Node.cpp

Parse_Node.h

Parse_Node.i

解析節點類,定義了服務配置文件解析後一個個基本節點對象的組織結構。

掛起節點類,定義了服務配置文件掛起操作解析出來的節點對應的動作。

恢復節點類,定義了服務配置文件恢復操作解析出來的節點對應的動作。

刪除節點類,定義了服務配置文件刪除操作解析出來的節點對應的動作。

靜態節點類,定義了服務配置文件解析出來的靜態節點(服務被靜態鏈接到應用程序)對應的動作。

動態節點類,定義了服務配置文件解析出來的動態節點(服務被動態態鏈接到應用程序)對應的動作。

流節點類,定義了服務配置文件解析出來的流節點對應的動作。

動態庫定位類,定義開啓動態庫加載後的操作句柄動作。

動態庫對象類,定義動態庫中動態對象符號地址的獲取動作。

動態庫函數類,定義動態庫中動態函數符號地址的獲取動作,以及調用函數返回節點對象。

啞節點類,定義了一個空的節點對應的動作。

靜態函數類,定義靜態函數地址的獲取,以及調用函數返回節點對象。

Service_Config.cpp

Service_Config.h

Service_Config.i

服務配置類,能夠a、根據靜態對象列表創建靜態對象。b、對配置文件進行解析,並根據解析結果創建相應的動態對象。並把生成的服務對象插入服務容器類進行後續管理,比如掛起、恢復、銷燬等操作。

Service_Manager.cpp

Service_Manager.h

Service_Manager.i

服務管理類,向反應器註冊一個監聽事件,當有客戶端連接上時執行相應的操作,並把操作的結果通過socket發回給客戶端,操作包括:顯示目前運行的服務信息、重新根據配置文件啓動服務等。

Service_Object.cpp

Service_Object.h

Service_Object.i

服務對象抽像基類,定義了服務對象的掛起、恢復操作接口。

服務外覆類,對服務進行了封裝,並定義了相應的對外接口,具體處理委託到具體的服務類完成。

服務對象智能指針類,定義了包含服務對象的智能指針類。

Service_Repository.cpp

Service_Repository.h

Service_Repository.i

服務容器類,包含了一個服務外覆類的容器,並且支持對這個容器的查找、插入、刪除、掛起、恢復等操作。

服務容器類迭代器,能夠對服務類型容器類進行迭代操作。

Service_Types.cpp

Service_Types.i

Service_Types.h

服務抽象基類,定義了服務的初始化、去初始化、掛起、恢復、查詢等操作,以及對三種服務對象的引用。

Service_Object服務類,定義了對Service_Object對象的服務封裝。

Module服務類,定義了對Module對象的服務封裝。

Stream服務類,定義了對Stream對象的服務封裝。

Shared_Object.cpp

Shared_Object.h

Shared_Object.i

共享對象抽象基類,定義了共享對象的基本操作接口。

Svc_Conf.h

 

Svc_Conf_l.cpp

通過flex產生的掃描器,略過。

Svc_Conf_y.cpp

通過yacc產生的掃描器,略過。

Svc_Conf_Tokens.h

 

[Streams]

 

IO_Cntl_Msg.cpp

IO_Cntl_Msg.h

IO_Cntl_Msg.i

IO控制消息類,封裝了IO控制消息相關的類型、值等信息。

Message_Block.cpp

Message_Block.h

Message_Block.i

數據塊類,負責數據buffer的管理,包括分配、釋放、克隆等。

消息塊類,採用數據庫類作爲節點,形成一個鏈表,每個節點還可以另外掛載一個消息塊鏈表,並且增加了讀寫標誌、優先級等信息便於實際使用。

Message_Queue.cpp

Message_Queue.h

Message_Queue.i

消息隊列類,對消息塊鏈表進行管理,實現包括入隊、出隊等操作。

消息隊列正向、反向迭代器,能夠對消息隊列進行正向、反向的遍歷操作。

Module.cpp

Module.h

Module.i

模塊類,包含了兩個任務,並對這兩個任務進行管理,這兩個任務分別進行流的讀寫工作。

Multiplexor.cpp

Multiplexor.h

Multiplexor.i

空文件。

Stream.cpp

Stream.h

Stream.i

流類,一個流包含頭模塊和一個尾模塊,頭模塊和尾模塊都分別由兩個流頭類和兩個流尾類構成,頭尾模塊之間是一個個處理模塊,每個模塊都包含兩個任務。同時定義了流構建、銷燬、插入模塊、刪除模塊、推送消息塊、獲取消息塊、發送控制消息、鏈接兩個流、去鏈接兩個流等操作。

Stream_Modules.cpp

Stream_Modules.h

Stream_Modules.i

流頭類和流尾類,分別定義了消息塊入流頭和入流尾操作,都各自對應一個任務。

Task.cpp

Task.h

Task.i

任務基類,定義了一個任務的概念,可以包含多個線程,以及任務的創建、掛起、恢復、銷燬等生命週期操作。

Task_T.cpp

Task_T.h

Task_T.i

任務模板類,在任務基類的基礎上包含了消息隊列對象,以及對消息隊列的相關操作。

[System_V_IPC]

System_V風格的IPC,整體略過。

[System_V_IPC/System_V_Message_Queues]

 

SV_Message.cpp

SV_Message.h

SV_Message.i

 

SV_Message_Queue.cpp

SV_Message_Queue.h

SV_Message_Queue.i

 

Typed_SV_Message.cpp

Typed_SV_Message.h

Typed_SV_Message.i

 

Typed_SV_Message_Queue.cpp

Typed_SV_Message_Queue.h

Typed_SV_Message_Queue.i

 

[System_V_IPC/System_V_Semaphores]

 

SV_Semaphore_Complex.cpp

SV_Semaphore_Complex.h

SV_Semaphore_Complex.i

 

SV_Semaphore_Simple.cpp

SV_Semaphore_Simple.h

SV_Semaphore_Simple.i

 

[System_V_IPC/System_V_Shared_Memory]

 

SV_Shared_Memory.cpp

SV_Shared_Memory.h

SV_Shared_Memory.i

 

[Timers]

 

High_Res_Timer.cpp

High_Res_Timer.h

High_Res_Timer.i

高精度時間類,支持到納秒級別,包含納秒時間獲取、相關的計時、與其他時間格式轉換等操作。

Profile_Timer.cpp

Profile_Timer.h

Profile_Timer.i

UINX時間類,支持UNIX內部時間格式的獲取、計時等操作。

Time_Request_Reply.cpp

Time_Request_Reply.h

時間請求類,封裝了向時間服務器發起請求的消息對象,包括消息對象的構造、銷燬、編解碼等操作。

Timer_Hash.cpp

Timer_Hash.h

哈希定時器隊列類,模板類的實例化。

Timer_Hash_T.cpp

Timer_Hash_T.h

哈希定時器隊列模板類,內部包含一個哈希數組,數組的每個元素是一個ACE_Timer_Queue_T派生類對象,啓動定時器時,入隊也是根據超時時間除以哈希數組大小求餘得到定時器要放在哈希數組中的位置,再把分配定時器對象以及入隊操作委託給這個位置的ACE_Timer_Queue_T派生類對象處理。

Timer_Heap.cpp

Timer_Heap.h

預分配定時器隊列類,模板類的實例化。

Timer_Heap_T.cpp

Timer_Heap_T.h

預分配定時器隊列模板類,不使用freelist的定時器對象分配管理機制,支持預分配一組定時器對象,並放在內部可用定時器隊列進行分配管理。

啓動定時器時,從可用定時器隊列中獲取定時器對象,然後再從定時器句柄數組中獲取可用的句柄,再按照部分有序的算法把定時器對象放到一個已分配定時器數組中進行管理,定時器句柄數組裏存儲着定時器句柄對應的定時器對象在已分配定時器數組中的位置。

取消定時器時,把定時器對象還給可用定時器隊列,定時器句柄也還給定時器句柄數組,在根據定時器句柄找到定時器對象在已分配定時器數組中的位置,然後把定時器對象從已分配定時器數組中刪除。

Timer_List.cpp

Timer_List.h

鏈表定時器隊列類,模板類的實例化。

Timer_List_T.cpp

Timer_List_T.h

鏈表定時器隊列模板類,內部使用環形鏈表來存儲已分配的定時器,且保持鏈表內根據超時時間遞增排序,定時器對象從freelist獲取。

Timer_Queue.cpp

Timer_Queue.h

Timer_Queue.i

定時器隊列類,模板類的實例化。

Timer_Queue_Adapters.cpp

Timer_Queue_Adapters.h

Timer_Queue_Adapters.i

基於alarm的定時器隊列類,創建定時器時同時啓動alarm定時器,在定時器超時信號處理函數裏調用定時器隊列的超時處理

線程定時器隊列類,採用一個或多個線程來等待處理定時器隊列的超時處理。

這兩個適配器類還比較雛形,有缺陷。

Timer_Queue_T.cpp

Timer_Queue_T.h

Timer_Queue_T.i

定時器隊列模板類,包含一組定時器,能夠定時器的啓動、停止、超時處理等動作。

Timer_Wheel.cpp

Timer_Wheel.h

時間輪定時器隊列類,模板類的實例化。

Timer_Wheel_T.cpp

Timer_Wheel_T.h

時間輪定時器隊列模板類,內部對於定時器存儲方式爲一個哈希數組,每個數組指向一個循環鏈表,鏈表每個節點是一個定時器對象,鏈表內根據定時器超時時間保持遞增排序,但哈希數組各個成員之間沒有排序關係,定時器對象從freelist獲取。啓動定時器時,入隊列根據超時時間除以哈希數組大小求餘到定時器要放在哈希數組中的位置。

[Token_Service]

 

Local_Tokens.cpp

Local_Tokens.h

Local_Tokens.i

令牌代理實體類(ACE_TPQ_Entry),指向一個令牌代理對象,並實現在一個令牌代理隊列中的相關操作。

令牌代理隊列類(ACE_Token_Proxy_Queue),維護令牌的持有者隊列,以及相關隊列操作。

令牌類(ACE_Tokens),定義了一個令牌對象相關操作接口,並維護有一個令牌持有者隊列。

互斥鎖令牌類(ACE_Mutex_Token),定義了一個互斥鎖類型的令牌對象的具體操作。

讀寫鎖令牌類(ACE_RW_Token),定義了一個讀寫鎖類型的令牌對象的具體操作。

令牌代理類(ACE_Token_Proxy),指向實際的令牌對象,可以掛載不同類型的令牌類,完成用戶對令牌的各種獲取、釋放等操作。

令牌的獲取和釋放等操作爲什麼要把另外一個令牌對象作爲入參沒看明白。

Remote_Tokens.cpp

Remote_Tokens.h

Remote_Tokens.i

遠程令牌代理類,通過一個socket連接,向遠程發送請求和接收響應來完成令牌的相關獲取、釋放等操作。

Token_Collection.cpp

Token_Collection.h

Token_Collection.i

令牌集類,定了包含一組令牌的對象,並能對他們進行整體的或者個別的令牌獲取、釋放等操作。

Token_Manager.cpp

Token_Manager.h

Token_Manager.i

令牌管理類,負責管理令牌的分配、釋放、死鎖檢測等動作,是單件類。

Token_Request_Reply.cpp

Token_Request_Reply.h

Token_Request_Reply.i

令牌請求類,定義了客戶端發向服務器的令牌請求結構及相關操作。

令牌響應類,定義了客戶端發向服務器的令牌響應結構及相關操作。

Token_Invariants.cpp

Token_Invariants.h

Token_Invariants.i

互斥鎖和讀寫鎖令牌類,同時包含互斥鎖和讀寫鎖,並在令牌的獲取、釋放等操作時能根據鎖的不同做區分處理。

 

(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章