Proactor和Reactor
有人在新闻组上问,我回了下,有点不对题。
我写过Windows下的IOCP,而在freebsd(或者posix系统)下的libevent仅仅是使用;我的感受是有理念上的不同。
这种理论也比较像Windows和Unix的理念——最根本的:Windows下用多线程而Unix用多进程。我解释一下,为了发挥当今服务器多cpu多core的功能,当使用iocp时,系统会自动创建core*2个线程(核心态)来帮你做io的回调。而在UNIX一般是网关进程fork出自己的多个实例,在之后跟逻辑进程(可以是多个或一个)打交道。其中如果连接之间有交互的话,就说游戏吧,那么一般就是一个逻辑进程。
就我在经验来看iocp——Proactor要比libevent——Reactor要成熟一些,因为它隐藏了很多细节——Windows理念。他也许要高效些因为用了核心态的线程池,第二多线程用个临界区就好了,多进程需要再次传递消息;但是Proactor的开发难度要高于Reactor,其中有很多细节,至少libuv的成熟晚于libevent,我也没有用过libuv。