ACE框架解读 - 源码篇

博主选择了ACE4.5版本进行源码阅读,认为其13万行的代码量较为适中。文章列出了该版本的主要目录和文件,并对每个文件中的关键类及其实现进行了个人理解的总结。
摘要由CSDN通过智能技术生成

最近研究了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

重利用策略类,定义了服务对象的连接重利用策略的分配和启动接口。

创建策略类,定义了服对象务的创建接口。
单件模式创建策略类,定义了服务对象的单件模式创建操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值