re: epoll与iocp的异同 袁斌 2011-08-01 10:45
你对iocp的理解太肤浅了,iocp最精华的莫过于对多线程的绑定能力,而epoll是没有这个的,如libevent之类的库居然按照epoll的模式,弄个所谓的socket消息转发技巧来实现线程间通知,这在iocp看来就是画蛇添足。

@by
iocp编程理论上比epoll困难,因为:
1、winsock系列函数众多,常用的也有几十个函数,而且参数众多,而*nix只有区区几个函数。
2、epoll函数通知之后是非阻塞同步调用,而iocp是异步调用,更难理解,编程也更复杂。
3、iocp模式的框架几乎没有单线程模式的,而epoll的框架很多都是单线程的,这和iocp的多线程框架相比难度降低了很多。当然这个不绝对,要视不同实现而定。
iocp异步多线程模式的确是加大了资源管理的难度,我看过很多网络框架的实现,几乎都在这上面花了很多精力,但处理得好的极少,即使是无错的都不多。所以也没见过几个写得好的框架,同样采用iocp的不同实现,效率相差可能超过百倍,这可能比epoll的不同框架差距更大。
最近的frame2中IO线程分组调度是为了给每个io线程绑定特殊tls数据,并使得这些线程可直接接收指定消息更新tls数据,标准框架还是经典模式的,使用好多年了,高效稳定可靠。
@欲三更
基本不认同你的看法
1、c++解决回调问题还是很灵活的,以上方法都可用,还有更多的方法可用。
2、模块接口化或com化就可解决模块间复用问题,这已经是使用很广泛并且很容易使用的技术。
3、c++做多线程既高效又灵活,你看看有几个多线程程序不是用c/c++做的?apache nginx chrome ie qq explorer ...
signal我很少用,因为不够灵活且不是线程安全的,用起来不爽。
跨模块跨线程都不算是什么大问题,只要管好数据同步和控制同步即可,跟用什么方法回调没太大关系。
re: 关于内存数据库 袁斌 2011-01-23 16:28
算不上什么大牛啊,有空就写一点,主要为了和大家交流,向朋友们学习。
re: 关于内存数据库 袁斌 2011-01-22 11:04
@zuhd
很有道理,我也倾向于和你一样的做法,用更复杂的东西效率低了可控度还下降了,出了问题还难查,再看看并发上如何提高下即可。
re: 关于内存数据库 袁斌 2011-01-21 15:35
@杨粼波
memcached和内存数据库完全不同,俺要的是数据运算,而不仅仅是存储key-value
@ouyang
gate升级还是会断线啊,后端服务器升级用户不断线,因为gate维护和客户端的连接,gate做了job的管理,在后端服务器升级好之后又重新分派job,这样给用户的感觉就是执行稍慢了一点。
@true
谢谢批评,虚心接受。
re: 如何把QT变小一点 袁斌 2010-10-03 14:38
别的不说,就这尺寸也算不上“完美”吧