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