ACE太过庞大,使得你即便是只使用它的一小部分,也不得不引用它的全部。而且框架一大堆,模式一个加一个,很多编程习惯也要改变。学习曲线太陡,也难
以将它作为一个模块集成自己的应用。
asio呢,有个牛大大说它是现时代的ACE,我觉得比较中肯。它太赶时髦了,过度模板化,用bind做回调也并不比虚函数好,看上去灵活了,代价却更
高了。我说的不光是运行时的内存和时间代价,更重要的编译时间难以忍受。
apr大约只是一个平台无关的api封装,相对来说比较轻量级。如果有C++的封装就更好了。
libevent就更轻量级了,轻量级到无法把它当成一个平台无关的socket库,仍然写很多平台相关的代码。
相比而下,我觉得apr还好点,其实我需要的只是一个机制,而不是一个完整的策略,这是unix的哲学。如果仅就异步通讯来说,我觉得
linux.epoll是最好的,简单、直接、有效,如果在每个平台上都有epoll可用,所有其它封装在我看来都是多余的了。
proactor真的就比reactor高效吗?它更多的是一种策略,据说Windows的操作系统级IOCP是用线程池实现的,它能高效到哪里
去?
asio我一直在用,写法是和ACE差不多,但因为是非侵入式,实际上要比ACE好用的多。bind回调是很灵活,但是代价更高却不见得,
template这种东西把很多运行期的东东都在编译期优化了,况且也没有数据说明有性能问题。想必你也不会所有地方都包含asio,所以编译时间也不
应该成为问题(如果有问题我觉得是你使用上的问题)。
以上两个已经是框架级的库了,不应该和其他比较偏底层的库一起比较。
On 1月4日, 下午11时00分, rockeet <rock...@gmail.com> wrote:
2009/1/7 pvoid <fredc...@gmail.com>:
On 2月1日, 下午4时16分, bronco <renfengx...@gmail.com> wrote:
> 用了大半年libevent,之间出现过最搞笑的一件事是:
>
> event_set(struct event*, ...); //这个指针必须是堆上滴,而他的sample是栈上滴,害过一大批人;
>
> asio,用起来真TMD舒服;
>
> 2009/2/1 bronco <renfengx...@gmail.com>
>
> > 顶 BBP 的说法
>
> > 2009/1/21 Duzy Chan <d...@duzy.info>
>
> > BBP 的说法比较赞同。
> >> --
> >>http://duzy.info
>
> >> 2009/1/7 BBP <zzffb...@gmail.com>
2009/2/2 宇文拓 <zlwi...@gmail.com>:
宇文拓 写道:
> >> 不过Ice和ACE这些不是一马事啊。- 隐藏被引用文字 -
>
> - 显示引用的文字 -
2009/2/1 bronco <renfe...@gmail.com>:
> 用了大半年libevent,之间出现过最搞笑的一件事是:
>
> event_set(struct event*, ...); //这个指针必须是堆上滴,而他的sample是栈上滴,害过一大批人;
我觉得你的论调怪怪的, 栈的又怎样? 堆的有怎样? 他们都是一样的,
调用者专递一个指针过去, 调用者就必须保证这个指针的内存生命周期是符合调用函数的.
事实上, 我用内存这么久, 从来不觉得栈和堆有本质的区别.
(可能例子没保证生命周期, 所以误导人 我的臆想)