- 浏览: 305965 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
Xiaoanemy:
我怎么就是不行Error opening zip file o ...
javarebel不用再反复重启tomcat -
fly_hyp:
lvwenwen 写道相对hessian来说有其他什么优势?应 ...
一个很牛的架构组件(Dubbo) -
lvwenwen:
相对hessian来说有其他什么优势?
一个很牛的架构组件(Dubbo) -
dj4307665:
想了解下,相对hessian来说有其他什么优势?
一个很牛的架构组件(Dubbo) -
fly_hyp:
sweat89 写道怎么解决的啊?忘了。怎么说呢?自己写的代码 ...
Spring之恶心错误记录
之所以摘录,是因为感动。
学之者生,用之者死——ACE历史与简评
陈硕 (giantchen_AT_gmail)
Blog.csdn.net/Solstice
2010 March 10
ACE 是现代面向对象网络编程的鼻祖,确立了许多重要模式,如 Reactor、Acceptor 等,重要到我们甚至觉得网络编程就应该是那样的。但为什么 ACE 叫好不叫座?大名鼎鼎却使用者寥寥?本文谈谈我的个人观点。
ACE 是一套重量级的 C++ 网络库,早期版本由 Douglas Schmidt 独自开发,后来有 40 余名学生与工作人员也贡献了大量代码。作者 Douglas Schmidt 凭借它发表了 30 余篇学术论文。ACE 的一大特点是融合了 Douglas Schmidt 提出的很多面向对象网络编程的设计模式,并且具有不可思议的跨平台能力
1 ACE 历史
先说说 ACE 之父 Douglas Schmidt 的个人经历:
- 1990 年在加州大学 Irvine 分校获计算机硕士学位;
- 1994 年在同一学校获计算机博士学位,论文《An Object-Oriented Framework for Experimenting with Alternative Process Architectures for Parallelizing Communication Subsystems》。从论文内容看,主要工作就是后来大名鼎鼎的 ACE framework,文中叫 ASX framework。
- 1994 年博士毕业后前往华盛顿大学任助理教授,后升至副教授
- 2003 年起在 Vanderbilt 大学任正教授至今
我相信 ACE 是 Douglas 在读博期间的主要工作,ACE 这个名字最早出现在 1993 年 12 月的一篇会议论文上,Douglas 的这篇文章获得了“最佳学生论文”奖。在此之前,Douglas 已经用 ASX 等其他名字发表了内容相近的文章。
我 能下载到的最早的 ACE 版本是 4.0.32,有大约 86,000 行 C++ 代码,代码的时间戳是 1998 年 10 月 22 日。早期 ACE 由 Douglas Schmidt 个人独立开发,从 ChangeLog 得知,1993 年 11 月 ACE 的版本号是 2.12。到了 1995 年 9 月,才有第一次出现其他开发者。在 1993~1996 年间的 684 次改动中,Douglas 一个人贡献了 529 次,另外几个主要开发者以及他们的修改次数分别是 Prashant Jain (58)、Tim Harrison (42)、David Levine (28)、Irfan Pyarali (20)、Jesper S. M|ller (5)。
从整个 ChangeLog 看,从 1993 年到 2010 年 3 月有 19,000 余次改动。有超过 200 人修改过代码,其中 23 个人的 check-in 次数大于 100,排名前 12 的代码修改者为:
3635 Johnny Willemsen (活跃年份:2001~今)
2586 Douglas C. Schmidt(原作者,活跃年份:1993~今)
1861 Steve Huston (活跃年份:1997~今)
1197 David L. Levine (活跃年份:1996~2000)
962 Nanbor Wang (活跃年份:1998~2003)
907 Ossama Othman (活跃年份:1999~2005)
865 Chad Elliott (活跃年份:2000~今)
823 Bala Natarajan (活跃年份:1999~2004)
708 Carlos O'Ryan (活跃年份:1997~2001)
544 J.T. Conklin (活跃年份:2004~2008)
479 Irfan Pyarali (活跃年份:1996~2003)
368 Darrell Brunsch (活跃年份:1997~2001)
看到这些“活跃年份”,你的第一反应是什么?我想到的是,这些人会不会多半是 Douglas 指导的研究生?我猜他们在读研期间参与改进 ACE,把工作内容写成论文发表,然后毕业走人。或许这能解释 ACE 代码风格的多样性。
在浏览代码历史的过程中,我还发现一个很有意思的现象,在 2008 年 3 月 4 日,某人不小心把整个 ACE 的源代码树删除了:
https://svn.dre.vanderbilt.edu/viewvc/Middleware?view=revision&revision=80824
随后又很快恢复:
https://svn.dre.vanderbilt.edu/viewvc/Middleware?view=revision&revision=80826
干这件事情的老兄在 2005~2009 这几年里一共 check in 了 120 余次。你对这件事情怎么看?你们的开发团队里有这样的人吗?
2 事实与思考
1. 除了 Douglas Schmidt 和 Stephen Huston 写的三本书籍之外,没有其他专著讲 ACE。
究竟是 ACE 太好用了,以至于无需其他书来讲解,还是太难用了,讲也讲不明白?抑或根本就没人在乎?
《C++ 网络编程 第1卷》《C++ 网络编程 第2卷》《ACE 程序员指南》 这三本书先后于 2001、2002、2003 年出版,之后再无更新。在同一时期,同样在网络编程领域,尽管 W. Richard Stevens 在 1999 年去世,他的 UNP 和 APUE 仍然由别人续写了新版。讲 C 语言 Sockets API 的书尚且不断更新,上层封装的 C++ 居然无动于衷?真的是封装到位了,屏蔽了这些变化?
UNP 的可操作性很强,读前面几章,就能上手编写简单的网络程序,看完大半本书,网络编程基本就算入门了,能编写一般应用的网络程序。相反,读完 ACE 那几本书,对于简单的网络编程任务还是感觉无从下手,这是因为书写得不好,还是 ACE 本身不好用?
2. ACE 很难用,非常容易用错
我 不止听到一个人对我说,他们在项目里尝试过 ACE,不是中途放弃,因为出了问题无法解决;就是勉强交差,并且从下一个项目起坚决不用。我听到的另一个说法是,ACE 教程的例子必须原封不动地抄下来,改一点点就会出漏子。不巧的是,ACE 的例子举来举去就是个 Logging 服务器,让人想照猫画虎也无从下手。在最近的《代码之美》一书中,Douglas Schmidt 再次拿它为例,说明他真的很喜欢这个例子。
用 ACE 编程如履薄冰,生怕在阴沟里翻船,不知道它背后玩了什么把戏。相反,用 10 来个 Sockets 系统调用就能搞定网络编程,我感觉比使用 ACE 难度要小。为什么“高级”工具反而没有低级工具顺手呢?
不好用的直接后果是少有人用,放眼望去,目前涉及网络的 C++ 开源项目里边,鲜有用 ACE 作为通信平台的(我知道的只有 Mangos)。相反,libevent 这个轻量级的 IO multiplexing 库有 memcached 这样的著名用户。
3. ACE 代码质量不高,更像是一个研究项目,而不是工业界的产品
读 ACE 现在的代码,一股学生气扑面而来,感觉像在读实习生写的代码。抛开编码风格不谈,这里举三个“硬伤”:
- sleep < 2ms
在某些早期的 Linux 内核上,如果 select/poll 的等待时间小于 2ms,内核会采用 busy-waiting。这是极大的 CPU 资源浪费,而 ACE 似乎没有考虑避免这一点。
- Linux TCP self-connection
Linux 的 TCP 实现有一个特殊“行为”,在某些特殊情况下会发起自连接。而 Linux 网络协议栈的维护者认为这是一个 feature,不是 bug,拒绝修复。通常网络应用程序不希望出现这种情况,我见过的好的网络库会有意识地检查并断开这种连接,然而 ACE 漠然视之。
- timeval on 64-bit
ACE_Time_Value 类直接以 struct timeval 为成员变量,保存从 Epoch 开始的微秒数。这在 32-bit 下没问题,对象大小是 8 字节。到了 LP64 模式的 64-bit 平台,比如 Linux,对象大小变为 16 字节,这么做就不够好了。我们可以直接用 int64_t 来保存这个以微秒为单位的时间,64-bit 整数能存下上下 30 万年,足够用了。减小对象大小并不是为了节约几个字节的内存,而是方便函数参数传递。在 x86-64 上,这种 8 字节的结构体可以用 64-bit 寄存器直接传参,也就是说 pass by value 会比 pass by reference 更快。对于一般的应用程序而言,要不要这么做值得商榷。对于底层的 C++ 网络库,不加区分地使用 pass by reference 会让人怀疑作者知其然不知其所以然。
对于以上几点情况,我怀疑 ACE 根本没用在 Linux 大规模生产环境下使用过,我只能期望它在别的平台表现好一些了。ACE 的作者们似乎更注重验证新想法,然后发论文,而不是把它放到工业环境中反复锤炼,打造为靠得住的产品。(类似 Minix 与 Linux 的关系。)
4. 移植性很好,支持我知道的和不知道的很多平台
ACE 的意义在于让我们明白了C++代码可以做到可移植,并展示了这么做会付出多么巨大的代价。不细说了,读过 ACE 代码的人都明白。
从代码质量上看,ACE 做到了能在这些平台上运行,但似乎没有在哪个平台占据主导地位。有没有哪个平台的网络编程首选 ACE?
出现这一状况的原因是,跨平台和高性能是矛盾的。跨平台意味着要抽象出多个平台的共性,以最 general 的方式编写上层代码。而高性能则要求充分发挥平台的特性,剑走偏锋,用尽平台能提供的一切加速手段,哪怕与其他平台不兼容。网络编程对此尤为敏感。
我 不知道 ACE 的性能如何,因为在各项性能评测榜上基本看不到它的名字(c10k 里就没有 ACE 的身影)。另外,Buffer class 的好坏直接反应了网络库对性能的追求,ACE 提供了比 std::deque<uint8_t> 更好的输入输出 Buffer 吗?(我不是说 deque 有多好,它基本是 fail-safe 的选择而已。)
5. ACE 过于复杂,甚至比它试图封装的对象更复杂。
(这里的代码行数均为 wc 命令的粗略估计。)
ACE 5.7 自身(不含 TAO 和 CIAO)有 30 万行 C++ 代码(Douglas 自己给出的数据是 25 万行,可能指的是略早的版本),这是一个什么概念呢?我们来看 TCP/IP 协议栈本身的实现有多少行:(均不含 IPv6)
- TCPv2 列出的 BSD4.4-Lite 完整 TCP/IP 协议栈代码有 15,000 行,其中 4,500 行 TCP 协议,800 行 UDP 协议,2,500 行 IP 协议
- Linux 1.2.13 完整的 TCP/IP 协议栈有 2 万多行 (net/inet)
- Linux 2.6.32.9 的 TCP/IP 协议栈有 6 万多行 (net/ipv4)
- FreeBSD 8.0 的 TCP/IP 协议栈有 5 万多行 (sys/netinet, 不含 sctp)
换句话说,ACE 用 30 万行 C++ 代码“封装”了不到 10 万行 C 代码(且不论 C++ 代码的信息密度比 C 大),这是不是头重脚轻呢?我理解的“封装”是把复杂的东西变简单,但 ACE 好像走向了另一个方向,把不那么复杂的东西变复杂了。
这个对比数字可能不太准确,因为 ACE 还封装了很多其他东西,请看。http://www.dre.vanderbilt.edu/Doxygen/5.7.7/html/ace/inherits.html 和 http://www.dre.vanderbilt.edu/Doxygen/5.7.7/html/ace/hierarchy.html
以下两张类的继承关系图片请在新窗口打开:
http://www.dre.vanderbilt.edu/Doxygen/5.7.7/html/ace/a06178.png
http://www.dre.vanderbilt.edu/Doxygen/5.7.7/html/ace/a06347.png
Douglas 说 ACE 包含了 40 人年的工作量, 对此我毫不怀疑。但是,网络编程真的需要这么复杂吗?TCP/IP 协议栈的实现也没这么多工作量嘛。或许只有 CORBA 这样的应用才会用到这么复杂的东西?那么为什么 ICE 在重新实现 CORBA 的时候没有基于 ACE 呢?是不是因为 ACE 架子拉得大,底子并不牢?
3 ACE 的意义
ACE 对于面向对象、设计模式和网络编程具有重大历史和现实意义。
ACE 诞生之时,正是 90 年代初期面向对象技术的高速发展期,ACE 一定程度上是作为面向对象技术的成功案例来宣传的。
在 1994 年前后,Unix 分为两个阵营,AT&T 的 SVR4 与 BSD 的 BSD4.x,这两家的 IO multiplexing 不完全兼容。比如 SVR4 提供 poll 调用,而 BSD 提供 select 调用。ACE 当时的宣传点之一是用面向对象技术屏蔽了两个平台的差异,提供了统一的 Reactor 接口。
【接下来,poll 在 1996 年 9 月 7 号加入 NetBSD,并随 NetBSD 1.3 于 1998 年 1 月 4 号发布。随后 FreeBSD 3.0 也支持 poll,1998 年 10 月发布。Linux 很早就支持 select,从 2.1.23 内核起支持 poll,发布日期为 1997 年 1 月 26 号。也就是说,到了 1998 年,平台差异被暂时抹平了。随后 epoll、/dev/poll、kqueue 以性能为名,再次扩大了平台差异。当然,Windows 至今不支持 poll。】
ACE 的设计似乎过于强调面向对象的灵活性,一些不该使用虚函数的地方也提供了定制点,比如 ACE_Timer_Queue 就应是个具体类,而不是允许用户 override schedule/cancel/expire 之类的操作。面向对象中,“继承”的目的是为了被复用,而不是去复用基类的代码。
查其文献,Reactor 在 1993 年登上《C++ Report》杂志的时候,文章标题还比较朴素,挂着“面向对象”的旗号:
- 《The Reactor: An Object-Oriented Interface for Event-Driven UNIX I/O Multiplexing (Part 1 of 2)》
- 《The Object-Oriented Design and Implementation of the Reactor: A C++ Wrapper for UNIX I/O Multiplexing (Part 2 of 2)》
转眼到了 1994 年,也就是《设计模式》成书的那一年,Douglas 开始写文章言必称 pattern:
- Reactor 变成了 pattern,收录于《Pattern Languages of Program Design》一书(An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events)。这篇文章比前面两篇难懂,如果直接阅读的话。
- Acceptor 是 pattern (A Design Pattern for Passively Initializing Network Services),
- Connector 也是 pattern(A Design Pattern for Actively Initializing Network Services),
- Proactor 还是 pattern(An Object Behavioral Pattern for Demultiplexing and Dispatching Handlers for Asynchronous Events),
- 居然连 Thread-Specific Storage 都成了 pattern(An Object Behavioral Pattern for Accessing per-Thread State Efficiently)。
- 还有 Non-blocking Buffered I/O,也是 pattern (An Object Behavioral Pattern for Communication Gateways)。
似 乎 "pattern" 这个字样成了发文章的通行证,这股风气直到 2000 左右才刹住。之后这些论文集结出版,以《Pattern-Oriented Software Architecture》为名出了好几本书,ACE 的内容主要集中在第二卷。(请留意,原来的提法是 Object-Oriented,现在变成了 Pattern-Oriented,似乎软件开发就应该像糖果厂生产绿豆糕,用模子一个个印出来完事。)
ACE 就像一个 pattern 大观园,保守估计有 10 来种 patterns 藏身其中,形成了一套模式语言(《Applying a Pattern Language to Develop Application-level Gateways》),这还不包括 GoF 定义的一般意义下的 OO pattern。
通过 ACE 来学习网络编程,那是本末倒置,因为它教不了你任何 UNP 以外的知识。(Windows 网络编程?)
然 而,如果要用面向对象的方式来搞网络编程,那么 ACE 的思想(而不是代码)是值得效仿的,毕竟它饱含了 Douglas Schmidt 等学者的心血与智慧。学得好的例子有 Apache Mina、JBoss Netty、Python Twisted、Perl POE 等等。
这就是我说“学之者生,用之者死”的含义。
4 ACE 文献导读
Douglas Schmidt 写了很多 ACE 的文章,其中不乏内容相近的作品。读他的文章,首选发表在技术杂志上的文章(比如 C++ Report),而不是发表在学术期刊或会议上的论文。前者的写作目的是教会读者技术,后者则往往是展示作者的新思路新想法,技术文章比学术论文要好读得多。
由于当时面向对象技术尚在发展,Douglas 文章里的图形很有特色,不是现在规范的 UML 图(那会儿 UML 还没定型呢),而是像变形虫一样的类图(经 pinxue 指出,这种图是 Grady Booch 发明的),放在一堆文献里也很容易认出来。
如果要用 ACE 的代码来验证文章的思路,我建议阅读和文章同时期的 4.0 版本代码,代码风格比较统一,代码量也不大,便于理解。
下面介绍几篇有代表性的论文。
- 1993 年 12 月第 11 届 SUG 会议,《The ADAPTIVE Communication Environment: Object-Oriented Network Programming Components for Developing Client/Server Applications》,获得最佳学生论文奖。这是我找到的最早一篇以 ACE 为题的论文。
- 1994 年 6 月第 12 届 SUG 会议,《The ADAPTIVE Communication Environment: An Object-Oriented Network Programming Toolkit for Developing Communication Software》,获得最佳学生论文奖。
以上两篇文章实际上内容基本相同,都是对 ACE 的概要介绍,看第二篇即可,第一次没看懂也没关系。
剩下要看的是一篇 Socket OO 封装、四篇 Reactor、三篇 Acceptor-Connector、一篇 Proactor。这些文章前面大多都给了链接,其余的这里补充一下:
- IPC_SAP: A Family of Object-Oriented Interfaces for Local and Remote Interprocess Communication
- The Design and Use of the ACE Reactor
- Acceptor and Connector -- A Family of Object Creational Patterns for Initializing Communication Services 这篇论文其实可以不用看,因为它不过是把前面两篇发表在 C++ Report 上的文章合到了一起。
不想看这 10 篇论文的话,读中译本《C++ 网络编程 第1卷》《C++ 网络编程 第2卷》《ACE 程序员指南》也行,翻译质量都不错。
5 设想中的 C++ 网络库
与文章主旨无关,略。
我觉得网络库要解决现实的问题,满足现实的需要,而不是把 features/patterns 堆在那里等别人来用。应该先有应用,再提炼出库。而不是先造库,然后寻求应用。
- C++ ACE(4回/391阅,7天前)
- Linux/UNIX、C++、Boost、ACE.......(10回/561阅,3个月前)
- 使用 ACE 库框架在 UNIX 中开发高性能并发应用(0回/347阅,1年前)
- Linux开放实验室(19回/1008阅,2个月前)
- Linux c++(2回/528阅,16天前)
- LuLu的网友评论(2回/100阅,8个月前)
- IP安全加密 IPSec安全技术全面接触 (0回/137阅,1年前)
- 程序员需要具备的基本技能(7回/741阅,2个月前)
- C++ Boost(0回/222阅,1个月前)
- linux下各种格式的压缩包的压缩、解压方法(0回/461阅,1年前)
发表评论
-
10 个非常重要的 HotSpot JVM 参数
2013-08-17 20:42 8241) 跟 Java 堆大小相关的 JVM 内存参数 下 ... -
A JSP to print all the stacks
2013-06-19 17:29 874A JSP to print all the stacks ... -
Ubuntu11.10下解决 jmap等jdk工具attach pid错误
2013-05-13 18:05 8471.错误案例 java] view plaincop ... -
GlusterFS集群文件系统研究
2013-02-26 11:17 998http://blog.csdn.net/liuben/ar ... -
云中的数据岌岌可危 储存毫无保密性?
2013-02-26 11:05 854想想也是,从构架角度考虑,不加密的数据放在别人的服 ... -
7条工作晋升建议
2013-01-21 16:13 7511. 观察:学习他人如何获得提升; 2. 多做:体现 ... -
几个软件研发团队管理的小问题
2012-12-13 10:23 989几个软件研发团队管理的小问题 最近在与一位总经理交流 ... -
身体的秘密大全
2011-08-25 15:27 1034眼睛告诉你的6个 ... -
关于编程,大学没有传授的十件事
2011-08-17 17:17 803笔者依然记得当年完成学业时,深信自己已经准备好进入任何一家 ... -
做人 做事 做架构师 架构师能力模型解析
2011-08-16 10:35 879究竟是什么让你在同 ... -
介绍山寨android的文章
2011-06-10 08:41 958摘录一篇介绍山寨Andro ... -
Susie WEE's Top 10 Career Tips
2011-04-26 09:59 918Susie WEE's Top 10 Career Tips ... -
Eclipse Tomcat远程调试配置
2011-02-17 17:54 3008第一步、配置tomcat 一、在windows系统中: 打开% ... -
网站开发人员应该知道的61件事
2011-02-16 16:00 1013网站开发人员应该知 ... -
老板的10个错误,描述的真生动
2010-07-02 21:49 1069摘自:http://www.cecon ... -
jspwiki中文问题的解决
2010-04-21 18:35 1369操作方法修改tomcat < ... -
怎么做code review
2010-03-15 16:20 1161hi, 同事推荐 Review Board 应该不错, ... -
在 Windows 系統掛載 UNIX NFS 分享目錄
2010-02-16 21:25 2268摘自:http://cha.homeip.net/blog/a ... -
iptable相关资料
2009-12-31 15:08 836http://hi.baidu.com/davyu ... -
人之初性本善,性本恶
2009-11-10 17:27 1382这是一篇好文章。 简单的读了一遍,感觉人之初性本 ...
相关推荐
ACE,全称Adaptive Communication Environment,是世界上最受欢迎的C++网络编程框架之一,因其高效、稳定和可移植性而备受赞誉。它为开发者提供了一套强大的工具和库,用于构建跨平台的分布式软件系统,特别适合实时...
2020年,百度发布了ACE智能交通引擎1.0,提出了“车路智行”整体解决方案,将自动驾驶、车路协同与智能交通相结合,已在20多个城市及多条高速公路上实施,推动了基础设施的智能化和出行服务的便捷化。 2021年,百度...
这个“ACE学习文档大全.rar”压缩包文件包含了丰富的资源,可以帮助初学者快速入门并深入理解ACE的核心概念和技术。下面将详细阐述压缩包中涉及的各个知识点。 1. **ACE入门**: ACE的入门学习通常包括了解其设计...
- **模式**: 可能是指ACE支持的设计模式,如工厂模式、观察者模式等。 - **VC**: 指明在Visual C++环境中配置和使用ACE。 总结,这个压缩包是学习和实践ACE的宝贵资源,包含了从配置到实践的完整流程,适合对C++...
示例可能会展示如何使用ACE_Guard和ACE_Mutex来实现线程安全。 4. **I/O复用**:ACE_Win32_Acceptor和ACE_SOCK_Acceptor是ACE中处理网络连接的关键类。它们利用了操作系统的I/O复用机制,如Windows的WSAAsyncSelect...
C++网络编程 卷2 基于ACE和框架的系统化复用
《ACE程序员指南-网络与系统编程的实用设计模式》进一步探讨了ACE中的设计模式,这些模式可以帮助解决常见的网络和系统编程问题。 1. 设计模式的定义、分类和应用场景。 2. 如何利用ACE库实现这些模式,例如Observer...
这是针对开发者的一份实践指南,涵盖了如何使用Ace进行实际的开发工作。它可能包含如何创建网络服务器、客户端、如何处理并发连接、如何利用Ace的事件模型进行异步编程等实例。此外,还可能涉及错误处理、性能优化...
《安卓Android源码——用的libgdx引擎写的ACE弹幕射击游戏设计与开发》 在安卓平台上,游戏开发是一项充满挑战与乐趣的工作。本项目是基于libgdx引擎进行的ACE弹幕射击游戏的设计与开发,libgdx是一款强大的跨平台...
《ACE与设计模式》 ACE(Adaptive Communication Environment)是一个跨平台的、开源的网络编程框架,它提供了许多用于构建高性能、高可用性分布式系统的服务。ACE的设计目标是帮助开发者处理网络通信中的复杂性,...
第二,框架的应用分析,每个框架都有一个应用实例与之对应,应用实例既帮助读者了解框架的使用方法,又为读者提供了一个可以调试的应用程序,便于读者使用调试器探索框架的内部秘密;第三,框架的实现分析,这是本书...
二、集成与使用ACE插件 1. **引入ACE库**:首先,在HTML文件中通过CDN或本地引入ACE的JavaScript库,例如: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.min.js"> ``` 2. **...
同时,这份PPT可能还提供了ACE与其他中间件或框架(如Java RMI、CORBA)的对比,以帮助学习者理解ACE的独特优势。 最后,`ace 培训目录.ppt`可能是整个培训课程的大纲,列出了每个主题的详细结构和学习路径。它可能...
【ACE框架详解】 ACE(Adaptive Communication Environment)框架是一个开源的、跨平台的软件开发工具集,主要用于构建高性能、高可移植性的网络应用。ACE框架以其强大的网络编程能力,广泛应用于分布式系统、实时...
这一部分是专门为ACE的使用者准备的,详细介绍了如何利用ACE库进行实际的网络通信开发。内容可能包括ACE的基本数据类型、网络协议栈的实现、线程管理、信号处理、I/O复用等关键主题。通过这部分的学习,开发者可以...
1. ACE框架的使用:如TAO(The ACE ORB,ACE的CORBA实现)、WLP(WebLogic Protocol)等,以及它们在构建分布式系统中的角色。 2. 服务组件模型(SCM):介绍ACE如何支持SCA(Service Component Architecture)和SOA...
《ACE程序员指南:网络与系统编程的实用设计模式》是ACE资料系列的第五部分,对于深入理解和应用ACE框架至关重要。这本书是ACE学习者的必备读物,尤其适合那些希望提升网络和系统编程技能的开发者。 ACE(Adaptive ...
6. **模板和设计模式**:ACE 使用了大量的C++模板和设计模式,如工厂模式、观察者模式等,提高了代码的可复用性和可扩展性。 7. **内存管理和日志记录**:ACE 提供了内存池(Memory Pools)来优化内存分配,以及...
这篇ACE学习随笔主要涉及了ACE库中配置文件`config-all.h`的相关内容,该文件是用来定义常用的宏和常量,以适应不同平台的编译需求。以下是对关键知识点的详细解释: 1. **宏定义的使用**: 在C++编程中,宏定义是...