0%

ACE初窥

ACE是The ADAPTIVE Communication Environment 的缩写,是用C++写的一套开源、免费、面向对象的网络通信框架。

在我的ubuntu虚拟机里安装了ACE-6.0.8.tar.gz,简单记录一下,

我的机器及环境配置如下:

1
2
3
4
5
6
7
8
/home/tiger/ACE/ACE_wrappers>uname -a
Linux tiger-laptop 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux

/home/tiger/ACE/ACE_wrappers>make --version
GNU Make 3.81

/home/tiger/ACE/ACE_wrappers>g++ --version
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3

按照指示安装还是很容易的,
只是对于习惯./configure && make && make install安装开源包的人来说,手工去copy两个文件还是有点小不爽的,
没有细看这个MPC(MakeProjectCreator)的工具具体怎么工作的,和GNU的autotools有啥区别?

简单翻译一下它的官方overview:

它提供了针对操作系统底层C通信接口的C++面向对象包装(wrapper facades):

1、包括并发(多进程multi-processing、多线程multi-threading)和同步机制(互斥量mutexes、条件变量condition variables、信号量semaphores);

(注:在tutorial里看到关于锁的ACE_Guard的包装,想了半天才明白,C++对象的{}生存周期及构造和析构函数的应用确实精简了代码)

2、进程间通信(IPC如:sockets,TLI,UNIX FIFO,STREAM pipes and WIN32 Named Pipes)和文件系统操作(filesystem APIs)组件;

(注:实际上用的最多的应该还是对socket操作的包装,TLI不是很明白,百度结果是:TLI(Transport Layer Interface)是System V API,它是在1986年的3.0版本中引入的。TLI并不是Unix内核的一部分,而且依赖于例程序。TLI确保传输层将保留它与会话、表示和应用层服务的独立性。)

3、内存管理组件(memory management,ACE提供了较多的allocator,有static,cached等,还有多进程可共享的基于mmap、Sbrk、shared memory的内存分配);

(注:还没有具体看这些allocator的算法策略,不做评论,回头想好好学习下这个基于shared memory的allocator源代码)

以及基于这些包装的高级别网络编程框架(frameworks):

1、事件的多路分离及分派接口(event demultiplexing and event handler dispatch),即reactor和proactor框架。事件可基于I/O、基于定时器timer、基于信号signal以及基于同步synchronization;

(注:看了下源代码,多路分离的reactor主要分两类:unix下的select和和windows上WFMO,然后还是支持linux的epoll,FreeBSD的kqueue似乎没有看到,Reactor框架倒不算陌生,很多事件驱动的程序也基本都用的这个框架,proactor框架接触不多,似乎还是需要底层操作系统的aio_()方法支持。)*

2、服务初始化框架(service initialization),即acceptor和connector框架。分离主动和被动连接角色,respectively, from application-specific tasks that communication services perform once initialization is complete.;

(注:后面还有句话,我暂不知如何理解,索性拷在这儿)

3、服务配置框架(service configuration),即service configurator框架。支持应用程序在安装和运行时的动态服务加载配置化;

(注:好吧,我承认这句话翻译的我自己都很难理解,我猜想核心也就是动态库的显式加载吧?win下LoadLibrary,unix下的dlopen,dlsym?)

4、分层流式组件(Hierarchically-layered stream components) – The ACE Streams components simplify the development of communication software applications, such as user-level protocol stacks, that are composed of hierarchically-layered services.

(注:这个暂时不理解)

5、ORB adapter components – ACE can be integrated seamlessly with single-threaded and multi-threaded CORBA implementations via its ORB adapters.

(注:对ORB还没有概念,百度结果是:Object Request Broker,对象请求代管者……)

正是这些patterns和frameworks让基于ACE的应用程序更加简洁、稳健、可移植、易维护(concise, robust, portable and maintainable)。

PS:这是我的第一篇技术博客,后面会结合正在学习的C++,尝试理解下ACE里的模式(patterns)设计和框架(framework)结构,不妥之处,还请指正!

欢迎大家拍砖~