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基礎上增強。 這個類未被其他類使用。 |
| 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相類似的功能。 |
| 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 | 互斥鎖和讀寫鎖令牌類,同時包含互斥鎖和讀寫鎖,并在令牌的獲取、釋放等操作時能根據鎖的不同做區分處理。 |
?
(完)
總結
以上是生活随笔為你收集整理的ACE框架解读 - 源码篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACE_Service_Handler类
- 下一篇: ACE网络编程模式比较