Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1695367
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类: LINUX

2007-02-11 15:43:35

ACE的一些问题和难点

    对ACE仰慕已久,终于有机会使用ACE开发系统。对ACE的仰慕与追求女孩是一样的,理想化的、美好的。实际用上才发现,ACE如女人一样难以琢磨,有太深奥的学问。搞不清楚,会让你身心疲惫。
    总结来说,ACE有如下好处:
    1. 跨平台
    2. 中间业务
    3. 系统抽象
    4. 网络传输
    5. 新的模式
    6. 。。。

    ACE的恶名:
    1. 内存泄露
    2. 系统庞大
    3. 体系繁杂
    4. 概念难以理解

    实际使用中发现的问题:
    1. 异步的Proactor在Linux下不能正常工作
    2. 和MFC结合有问题
    3. 递归线程锁Linux下有问题

    现在简单说一说,经过使用,ACE的优点一个都不少,都可以体验到。比如我们现在在Windows下开发程序,与系统、语言有关的函数、调用、资源全部使用ACE。在VS.net下编译调试,要知道VC的调试工具要比Linux下的方便友好多了。结果是,要移植到Linux下时,只需要在Linux下写好Makefile,把Windows下调试通过的程序包含进来,就完全可以运行,也省去了调试的麻烦。
    其它也全是,再比如说异步传输模式,在Windows下是使用完成端口,在Linux下是其它的东西。一般是AIO。如果自己写完成端口的传输层框架,要做的调试工作是相当麻烦的。在ACE下,使用Proactor即可,框架已经经过验证了。

    再说说ACE的恶名。
    1.内存泄露是指在Windows下的泄露,实际使用中发现,泄露并不是ACE泄露的,是VC泄露的,即使不使用ACE,创建一个空的工程,VC也会有一定数量的内存泄露,大小是固定的,体积是很小的。所以,这是ACE替VC的恶名。
    2.系统庞大,这是当然的了,复杂的东西当然庞大了,庞大后,功能也强大了。Windows也比Dos大多了吗。但是,实际使用中,我们只会使用到其中很小一部分,所以可以选择性地学习,连接文件时,连接程序也会提取用到的符号,最后的程序体积也不会很大。
    3.繁杂。因为ACE要处理各种异构平台,当然做了很多事。另外,还有人说ACE效率可能不行,因为太繁杂。其它,ACE中对不同平台的兼容是使用模板、预定义实现的,编译连接后,体积是很小的。最终代码不大。当然,ACE不太适合用在嵌入式系统上,因为使用到了很多模式,函数调用过多,这种开销在嵌入式系统上是不允许的。
    4.概念难以理解,这就是各人水平了。其实ACE中用到的各种技术和模式,都是大家多多少少用到的,只是没有这么大面积地地使用。

    再说说几个实际问题。
    1.因为Linux对Posix支持的不完整,所以,异步的Proactor在Linux和很多Unix下工作不正常,这个问题只需要安装一个Posix-aio做一个适配和伪装即可以。将来Linux内核完全支持Posix后,重新编译安装一个新内核即可真正支持异步传输。
    如果只装一个Posix-aio还不能正常工作,在这个基础上再装一个TProactor,一定可以解决问题。
    2.和MFC结合问题:在Windows下安装Perl环境,然后重启。然后执行下面命令
    cd %ACE_ROOT%
    perl bin\mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug"  ace/ace.mwc
    然后打开%ACE_ROOT%/ace/ace.sln,编译MFC两个工程,生成ACEmfc.lib及dll就可以了,然后使用时,先调用:ACE::init(),使用完了调用 ACE::fini()。
    就这么简单,一定可以用的。多试试。
    3.这个还没有大面积遇到,以后再说。

    ACE是“会者不难,难者不会”。

    好东西啊!一般人我不告诉他!

阅读(754) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~