ACE的源码划分
前几篇文章也提到过,ACE的所有源文件和头文件都杂乱堆在了ACE_wrappers/ace目录下。这样的代码组织方式给学习ACE带来了很大的困难,很多朋友在看到ace目录下庞大的代码的时候,几乎就失去了学习ACE的信心^_^。因此,我们有必要对ACE的代码进行重新组织,以降低学习曲线。下面,我将给出我对ACE源码的划分方法。其实,我也是刚学习ACE没有多久,对ACE的了解还甚少,所以,我的源码划方式法不一定十分正确,这里共享出来,仅供大家参考。
其实,在ACE的帮助文档里,ACE-subsets.html和ACE-categories.html,这两个文档对指导ACE的源码划分起到了很大的作用,否则,我刚刚接触ACE,就想对其进行源码划分,是不可能完成的。
ACE-subsets.html,这个文档主要介绍了ACE的library subsetting。正常情况下,在编译完ACE后,只会产生一个ACE的库。我们可以根据该文档的介绍,简单的修改一下Makefile,就可以对ACE的库进行子集化,我们可以编译出OS、Thread等这样的子库。
ACE-categories.html,这个文档对ACE中的代码进行了一些功能上的分类。具体大家可以详细的参考一下这两个文档,这两个文档对学习ACE还是有一定的帮助的。
在ACE的源代码目录ace下,我将建立很多子目录,来对ACE的代码进行按功能分类:
ACE_OS:该目录里包含的代码是OS的API的wrapper,也就是ACE的OS适配层;
包含代码: ARGV.cpp OS_Memory.cpp
Argv_Type_Converter.cpp OS_QoS.cpp
Base_Thread_Adapter.cpp OS_String.cpp
Basic_Types.cpp OS_TLI.cpp
Copy_Disabled.cpp OS_Thread_Adapter.cpp
Env_Value_T.cpp Sched_Params.cpp
Handle_Set.cpp Template_Instantiations.cpp
Makefile Thread_Hook.cpp
OS.cpp Time_Value.cpp
OS_Dirent.cpp
OS_Errno.cpp
OS_Log_Msg_Attributes.cpp
ACE_Codec:该目录包含的是ACE的各种编码类型的处理代码,目前只包含了BASE64编码的处理;
包含代码:Codecs.cpp Makefile
ACE_Connection:该目录包含的是ACE中的Acceptor-Connector框架代码和异步通讯类代码;
包含代码:Acceptor.cpp Connector.cpp
Asynch_Acceptor.cpp Makefile
Asynch_Connector.cpp POSIX_Asynch_IO.cpp
Asynch_IO.cpp Strategies_T.cpp
Asynch_IO_Impl.cpp Svc_Handler.cpp
Asynch_Pseudo_Task.cpp WIN32_Asynch_IO.cpp
Cached_Connect_Strategy_T.cpp
Caching_Strategies_T.cpp
ACE_Demux:该目录包含的是ACE中的Reactor和Proactor框架代码;
包含代码:Dev_Poll_Reactor.cpp Priority_Reactor.cpp TP_Reactor.cpp Event_Handler.cpp Proactor.cpp TkReactor.cpp
Event_Handler_T.cpp QtReactor.cpp WFMO_Reactor.cpp
FlReactor.cpp Reactor.cpp WIN32_Proactor.cpp
Makefile SUN_Proactor.cpp XtReactor.cpp
Msg_WFMO_Reactor.cpp Select_Reactor.cpp
POSIX_CB_Proactor.cpp Select_Reactor_Base.cpp
POSIX_Proactor.cpp Select_Reactor_T.cpp
ACE_IPC:该目录包含的是ACE中进程间通讯的一些封装代码:
包含代码:ATM_Acceptor.cpp Makefile
ATM_Addr.cpp Pipe.cpp
ATM_Connector.cpp SPIPE.cpp
ATM_Params.cpp SPIPE_Acceptor.cpp
ATM_QoS.cpp SPIPE_Addr.cpp
ATM_Stream.cpp SPIPE_Connector.cpp
DEV.cpp SPIPE_Stream.cpp
DEV_Addr.cpp SV_Message.cpp
DEV_Connector.cpp SV_Message_Queue.cpp
DEV_IO.cpp SV_Semaphore_Complex.cpp
FIFO.cpp SV_Semaphore_Simple.cpp
FIFO_Recv.cpp SV_Shared_Memory.cpp
FIFO_Recv_Msg.cpp Signal.cpp
FIFO_Send.cpp TLI.cpp
FIFO_Send_Msg.cpp TLI_Acceptor.cpp
FILE.cpp TLI_Connector.cpp
FILE_Addr.cpp TLI_Stream.cpp
FILE_Connector.cpp TTY_IO.cpp
FILE_IO.cpp Typed_SV_Message.cpp
IOStream.cpp Typed_SV_Message_Queue.cpp
IOStream_T.cpp UNIX_Addr.cpp
IO_SAP.cpp UPIPE_Acceptor.cpp
MEM_Acceptor.cpp UPIPE_Connector.cpp
MEM_Addr.cpp UPIPE_Stream.cpp
MEM_Connector.cpp XTI_ATM_Mcast.cpp
MEM_IO.cpp
MEM_SAP.cpp
MEM_Stream.cpp
ACE_LIB:该目录将包含ACE编译好的各个子库;
ACE_Logging:该目录包含ACE中的日志处理相关代码;
包含代码:Dump.cpp Log_Msg_UNIX_Syslog.cpp
Dump_T.cpp Log_Record.cpp
Log_Msg.cpp Logging_Strategy.cpp
Log_Msg_Backend.cpp Makefile
Log_Msg_Callback.cpp Trace.cpp
Log_Msg_IPC.cpp
Log_Msg_NT_Event_Log.cpp
ACE_Memory:该目录包含了ACE内存处理相关代码;
包含代码:Based_Pointer_Repository.cpp Obstack.cpp
Based_Pointer_T.cpp Obstack_T.cpp
Makefile PI_Malloc.cpp
Malloc.cpp Read_Buffer.cpp
Malloc_Allocator.cpp Shared_Memory.cpp
Malloc_Instantiations.cpp Shared_Memory_MM.cpp
Malloc_T.cpp Shared_Memory_SV.cpp
Mem_Map.cpp
Memory_Pool.cpp
Obchunk.cpp
ACE_Misc:ACE中一些没有明确功能分类的代码,属于杂项;
包含代码:CE_Screen_Output.cpp NT_Service.cpp
Makefile gethrtime.cpp
ACE_Nameservices:该目录包含了ACE中名字服务相关代码;
包含代码: Name_Space.cpp
Local_Name_Space.cpp Naming_Context.cpp
Local_Name_Space_T.cpp Registry_Name_Space.cpp
Makefile Remote_Name_Space.cpp
Name_Proxy.cpp
Name_Request_Reply.cpp
ACE_Sockets:该目录包含的是ACE的socket封装代码;
包含代码:Addr.cpp SOCK_CODgram.cpp
INET_Addr.cpp SOCK_Connector.cpp
IPC_SAP.cpp SOCK_Dgram.cpp
LOCK_SOCK_Acceptor.cpp SOCK_Dgram_Bcast.cpp
LSOCK.cpp SOCK_Dgram_Mcast.cpp
LSOCK_Acceptor.cpp SOCK_IO.cpp
LSOCK_CODgram.cpp SOCK_SEQPACK_Acceptor.cpp
LSOCK_Connector.cpp SOCK_SEQPACK_Association.cpp
LSOCK_Dgram.cpp SOCK_SEQPACK_Connector.cpp
LSOCK_Stream.cpp SOCK_Stream.cpp
Makefile Sock_Connect.cpp
Multihomed_INET_Addr.cpp
SOCK.cpp
SOCK_Acceptor.cpp
ACE_Streams:该目录包含了ACE中的Streams和Task框架代码;
包含代码:CDR_Base.cpp Module.cpp
CDR_Stream.cpp Multiplexor.cpp
Codeset_IBM1047.cpp Reactor_Notification_Strategy.cpp
Codeset_Registry.cpp Stream.cpp
Codeset_Registry_db.cpp Stream_Modules.cpp
IO_Cntl_Msg.cpp Task.cpp
Makefile Task_T.cpp
Message_Queue.cpp
Message_Queue_T.cpp
ACE_Svcconf:该目录包含了ACE中的Service Configurator框架代码;
包含代码:DLL.cpp Service_Types.cpp
DLL_Manager.cpp Shared_Object.cpp
Dynamic_Service.cpp Svc_Conf.l
Dynamic_Service_Base.cpp Svc_Conf.y
Makefile Svc_Conf_Lexer_Guard.cpp
Parse_Node.cpp Svc_Conf_l.cpp
Service_Config.cpp Svc_Conf_y.cpp
Service_Manager.cpp XML_Svc_Conf.cpp
Service_Object.cpp
Service_Repository.cpp
Service_Templates.cpp
ACE_Threads:该目录包含了ACE中的线程和同步机制相关代码,例如:thread manager;
包含代码:Activation_Queue.cpp Process_Manager.cpp Thread.cpp
Atomic_Op.cpp Process_Mutex.cpp Thread_Adapter.cpp
Atomic_Op_T.cpp Process_Semaphore.cpp Thread_Control.cpp
File_Lock.cpp RW_Process_Mutex.cpp Thread_Exit.cpp
Future.cpp Synch.cpp Thread_Manager.cpp
Future_Set.cpp Synch_Options.cpp Token.cpp
Makefile Synch_T.cpp
Process.cpp Test_and_Set.cpp
ACE_Timer:该目录包含ACE中和时间相关的代码;
包含代码:Timer_Heap.cpp
Basic_Stats.cpp Timer_Heap_T.cpp
High_Res_Timer.cpp Timer_List.cpp
Makefile Timer_List_T.cpp
Profile_Timer.cpp Timer_Queue.cpp
System_Time.cpp Timer_Queue_Adapters.cpp
Time_Request_Reply.cpp Timer_Queue_T.cpp
Timeprobe.cpp Timer_Wheel.cpp
Timeprobe_T.cpp Timer_Wheel_T.cpp
Timer_Hash.cpp
Timer_Hash_T.cpp
ACE_Token:Token是ACE中实现的一种同步机制,保证严格的FIFO或LIFO策略来获得锁。ACE通过Token机制实现了分布式同步机制。
包含代码:Local_Tokens.cpp Token_Collection.cpp Token_Request_Reply.cpp
Makefile Token_Invariants.cpp
Remote_Tokens.cpp Token_Manager.cpp
ACE_Utils:ACE中的一些基础数据结构和算法的工具类代码;
包含代码:ACE.cpp Init_ACE.cpp
Active_Map_Manager.cpp Intrusive_List.cpp
Active_Map_Manager_T.cpp Intrusive_List_Node.cpp
Arg_Shifter.cpp Lib_Find.cpp
Array_Base.cpp Makefile
Auto_IncDec_T.cpp Managed_Object.cpp
Auto_Ptr.cpp Map.cpp
Cache_Map_Manager_T.cpp Map_Manager.cpp
Caching_Utility_T.cpp Map_T.cpp
Capabilities.cpp Message_Block.cpp
Cleanup_Strategies_T.cpp Message_Block_T.cpp
Configuration.cpp Method_Request.cpp
Configuration_Import_Export.cpp Node.cpp
Connection_Recycling_Strategy.cpp Notification_Strategy.cpp
Containers.cpp Object_Manager.cpp
Containers_T.cpp Pair.cpp
Date_Time.cpp Pair_T.cpp
Dirent.cpp RB_Tree.cpp
Dirent_Selector.cpp Recyclable.cpp
Dynamic.cpp Refcountable.cpp
Filecache.cpp Registry.cpp
Flag_Manip.cpp SString.cpp
Framework_Component.cpp Sample_History.cpp
Framework_Component_T.cpp Singleton.cpp
Free_List.cpp Stats.cpp
Functor.cpp String_Base.cpp
Functor_T.cpp String_Base_Const.cpp
Get_Opt.cpp Swap.cpp
Handle_Ops.cpp Unbounded_Queue.cpp
Hash_Cache_Map_Manager_T.cpp Unbounded_Set.cpp
Hash_Map_Manager.cpp Unbounded_Set_Ex.cpp
Hash_Map_Manager_T.cpp Vector_T.cpp
Hash_Map_With_Allocator_T.cpp
Hashable.cpp
include:该目录又包含子目录ace,也就是说include/ace/目录下,包含了ACE的所有头文件和.i文件,之所以这样组织,是因为ACE中的源 文件和头文件的包含文件的方式为:#include "ace/OS.h",所以采用这种目录结构方式来存放头文件和.i文件。这里,对头文件和.i 文件,没有进一步按照功能划分,就是因为#include "ace/OS.h"这种包含方式,如果头文件和.i文件也按照功能划分,那么代码修改 量相当大;
通过上面给出的目录结构和源文件功能划分及头文件组织方式,相信读者以可以自行对ACE代码进行整理了。在实际整理和编译代码的过程中,需要修改Makefile和ACE头文件中以_T方式为后缀的头文件,例如:Obstack_T.h,需要修改里面模板源文件包含路径。我将在下一篇文章中进行描述。
我再次强调,上面ACE源码划分方式,不一定十分正确^_^,随着我们ACE学习和理解的深入,我们可能会进行更改。其实,在我们整理ACE源文件的时候,我们可以进一步了解ACE的各个源文件大致功能,对我们以后更深入的学习大有裨益。
ACE的源码划分的更多相关文章
- ACE - Reactor源码总结整理
ACE源码约10万行,是c++中非常大的一个网络编程代码库,包含了网络编程的边边角角. ACE代码可以分三个层次:OS层.OO层和框架层: OS层主要是为了兼容各个平台,将网络底层API统一化,这一层 ...
- ACE - ACE_Task源码剖析及线程池实现
原文出自http://www.cnblogs.com/binchen-china,禁止转载. 上篇提到用Reactor模式,利用I/O复用,获得Socket数据并且实现I/O层单线程并发,和dispa ...
- ACE Reactor 源码解析
http://blogs.readthedocs.org/ ACE的学习笔记,根据源码分析了Reactor模型的实现. 因为笔记编写技术限制,这里仅列出主要目录,如有可能可以抽空复制到该Blog中 ...
- nginx源码学习_源码结构
nginx的优秀除了体现在程序结构以及代码风格上,nginx的源码组织也同样简洁明了,目录结构层次结构清晰,值得我们去学习.nginx的源码目录与nginx的模块化以及功能的划分是紧密结合,这也使得我 ...
- ACE - Reactor模式源码剖析及具体实现(大量源码慎入)
原文出自http://www.cnblogs.com/binchen-china,禁止转载. 在之前的文章中提到过Reactor模式和Preactor模式,现在利用ACE的Reactor来实现一个基于 ...
- Spark源码阅读(1): Stage划分
Spark中job由action动作生成,那么stage是如何划分的呢?一般的解答是根据宽窄依赖划分.那么我们深入源码看看吧 一个action 例如count,会在多次runJob中传递,最终会到一个 ...
- Spark技术内幕:Stage划分及提交源码分析
http://blog.csdn.net/anzhsoft/article/details/39859463 当触发一个RDD的action后,以count为例,调用关系如下: org.apache. ...
- Spark源码剖析(八):stage划分原理与源码剖析
引言 对于Spark开发人员来说,了解stage的划分算法可以让你知道自己编写的spark application被划分为几个job,每个job被划分为几个stage,每个stage包括了你的哪些代码 ...
- [Spark内核] 第34课:Stage划分和Task最佳位置算法源码彻底解密
本課主題 Job Stage 划分算法解密 Task 最佳位置算法實現解密 引言 作业调度的划分算法以及 Task 的最佳位置的算法,因为 Stage 的划分是DAGScheduler 工作的核心,这 ...
随机推荐
- @几种OutOfMemory异常
Java虚拟机运行时数据区 在Java虚拟机规范的描述中,除了程序计数器之外,虚拟机内存的其他几个运行时区域都会发生OutOfMemory异常的可能. 我们可以在IDE(如IDEA)中设置虚拟机启动参 ...
- Andriod源码搜集
1.一个左侧抽屉式导航NavigationDraw 教程:http://developer.android.com/training/implementing-navigation/nav-drawe ...
- BERT的开源实现的使用
参考这篇文章: 小数据福音!BERT在极小数据下带来显著提升的开源实现 https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=224749 ...
- C++/Php/Python 语言执行shell命令
编程中经常需要在程序中使用shell命令来简化程序,这里记录一下. 1. C++ 执行shell命令 #include <iostream> #include <string> ...
- 重启Windows的PowerShell
这么简单的一个命令都单独写一篇blog, 是不是太无耻了? 好吧, 谁让咱不会呢. 学会了就来一篇. 呵呵. Restart-Computer 来源 ================ http:/ ...
- python 机器学习多项式回归
现实世界的曲线关系都是通过增加多项式实现的,现在解决多项式回归问题 住房价格样本 样本图像 import matplotlib.font_manager as fm import matplotlib ...
- VMware中让虚拟机支持虚拟化
一.问题 由于需要玩一下OpenNebula,但是现在自己只有一台笔记本,如何玩?当然是VMVare了,于是装了几台Ubuntu的虚拟机,但是在看安装OpenNebula的前提要求是 安装的主机cpu ...
- java之类的初始化
概述 在java中,一个类能够包括的元素有变量,方法,代码块.这当中变量能够分为普通变量和静态变量,代码块也有静态代码块和普通代码块.在创建一个对象的时候,这个对象是怎么初始化的呢.这里我们就開始来解 ...
- 无脑抢标——算了吧
第一版时,我对拍拍贷是恐惧的,缓解我的恐惧的方法,就是寻找尽可能安全的方案.然后,我就发现了这个策略:超过信用等级普通利率的标的.A标一般16,B一般18--那我就寻找大于16的A,大于18的B,C我 ...
- 【Python】使用torrentParser1.03对多文件torrent的分析结果
Your environment has been set up for using Node.js 8.5.0 (x64) and npm. C:\Users\horn1>cd C:\User ...