最近研究了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
重利用策略类,定义了服务对象的连接重利用策略的分配和启动接口。