初学epollreactor


                                                  前几个月,因为教研室师兄的大力推荐,大家跟着学习了下twisted,我也简单的学习了下reactor,factory,deferred等基本的twisted的应用模式,后来因为教研室其他事情比较多,就没怎么继续深入了,最近被派到北京,因为项目需求,又重拾twisted,再次学习中,发现twisted的强大。
  今天下午学着试了下,epollreactor,以前都是在c/c++下用epoll,这次试验下python下实现epollreactor,还是最基本的回射服务器,本以为很轻松的搞定,没想到一些小细节啊,老是出错,后来咨询啦下老郭同志,俺们的大师兄,后面总算找到问题,记录下来,以免再犯,哈哈。
   1. reactor全局一般是一个,所以factory出错处理的时候,最好是不要用reactor.stop(),不然就会报错了,"Can't stop reactor that isn't running",关了唯一的一个,后面出错的时候再去关,当然就会出错了。我个人处理的时候就简单的把这个连接关闭了,然后打印出错。

   2. 两边都是要epollreactor.install(),第一次的时候,就是忘记在客户端弄这个了(对了,别忘记了ulimit设置fd哦),导致一直卡在1020这个数目上,啧啧。
   好了,一切完成,现在在epollreactor的模式下测试下6000个连接,用nmon分析下:


  CPU:
  User%
  Sys%
  Wait%
  Idle%
  CPU%


  Avg
  1.2
  4.4
  0.0
  94.4
  5.6


  Max
  23.5
  90.0
  0.0
  100.0
  100.0


  Max:Avg
  19.8
  20.3
  0.0
  1.1
  17.8


               
               
               
               
               
               
               
               
                nmon -f(保存到文件) -s(打印间隔时间) -c(打印次数)