01 2009 档案

asio/ACE/apr/libevent
摘要:整体感觉:ACE太庞大,asio 太赶时髦。ACE太过庞大,使得你即便是只使用它的一小部分,也不得不引用它的全部。而且框架一大堆,模式一个加一个,很多编程习惯也要改变。学习曲线太陡,也难以将它作为一个模块集成自己的应用。asio呢,有个牛大大说它是现时代的ACE,我觉得比较中肯。用bind做回调也并不比虚函数好,看上去灵活了,代价却更高了。我说的不光是运行时的内存和时间代价,更重要的编译时间难以忍受。apr大约只是一个平台无关的api封装,相对来说比较轻量级。libevent就更轻量级了,轻量级到无法把它当成一个平台无关的socket,还要写很多平台相关的代码。相比而下,我觉得apr还好点,其 阅读全文

posted @ 2009-01-04 22:35 能发波 阅读(249) 评论(0) 推荐(0)

关于变量名的一点感想
摘要:变量的命名规则,一般有这么几种:1. 骆驼规则,如 Windows Api 的命名规则(CreateFile/GetDiskFreeSpaceEx),Java 类名的规则2. 首单词小写,如Java方法名(readByte)3. 下划线分隔单词,如C++标准库(lower_bound/equal_range)4. 全部小写,无分隔,如unix(posix)的很多函数名(getpagesize),但这类大部分使用所写(mmap/sysconf)5. 骆驼规则再加下划线,ACE使用这种规则(ACE_Event_Handler )6. C 宏名命名规则,一般是全部大写,再加下划线(BOOST_CUR 阅读全文

posted @ 2009-01-04 11:07 能发波 阅读(104) 评论(0) 推荐(0)

最便捷、最强大、速度最快的C++序列化框架【二】
摘要:项目地址:http://code.google.com/p/febird目前该框架(DataIO)仅支持二进制。想起序列化支持只需要一个宏DATA_IO_LOAD_SAVE/DATA_IO_LOAD_SAVE_V,对象成员基本上用“&”连接起来,这样,可以写一个简单的语法分析器,将成员序列化表达转化成字符串,然后进行语法分析,这样,就可以在不用改变客户代码的情况下,进行文本方式(如XML)的序列化了,比boost的要简单许多。如,目前的宏这样定义:#defineDATA_IO_LOAD_SAVE(Class,Members)/ templatevoidload(DataIO&d 阅读全文

posted @ 2009-01-02 14:24 能发波 阅读(226) 评论(0) 推荐(0)

Coroutine真的可以大幅提高效率吗?
摘要:这段时间一直想用Coroutine来实现我的rpc中异步调用的分派。看了很多Coroutine的资料,感觉它比起线程切换,就是少了个内核调用,少了自动激活,以及一些内和支持的线程状态(errno,tls等)。在处理器状态的存储/恢复,堆栈的切换等方面的开销都是一样的。在x86这样的体系结构下,处理器的状态(寄存器状态)很少,就那么几个寄存器,存储/恢复起来很快。但是,象MIPS,甚至Itanium这样的体系结构,他们的寄存器很多,Itanium甚至有128个64位的寄存器,这样,光寄存器状态就要1024byte!存储/恢复的开销很大。有时也想,在没有Coroutine的普通函数调用中(不需要切 阅读全文

posted @ 2009-01-02 14:02 能发波 阅读(132) 评论(0) 推荐(0)

使用C++模板实现不需要IDL的RPC【二】
摘要:项目地址:http://code.google.com/p/febirdIDL的数据定义由几个宏定义实现:RPC_DECLARE_MF(FunName, ArgList)声明函数,ArgList必须带括号BEGIN_RPC_REGISTER_MF_EX(ThisClass,ClassName)BEGIN_RPC_REGISTER_MF(ThisClass)开始注册函数EX后缀可以使用指定的名字作为类名称RPC_REGISTER_MF(FunName)注册一个函数END_RPC_REGISTER_MF()结束注册用起来很类似于微软MFC中的消息映射声明。实现上有过几次改动:初始完成l 每个Cli 阅读全文

posted @ 2009-01-02 14:00 能发波 阅读(317) 评论(0) 推荐(0)

导航