我的IOCP服务器

花了一个多星期的时间,终于把一个基于IOCP的服务器基本完成了.

 

先说说功能吧(正兴奋着呢).这个服务器是一个TCP服务器,支持python脚本编写上层逻辑,拥有比较简单的一个内存管理,使用CPU个数的工作线程. python脚本是嵌入在C代码中的.

 

需要改进的部分有: 1.内存管理,2.更加精确的对socket的管理

 

开发感悟:

首先来说下IOCP,这个东西比EPOLL稍微复杂一些,其实学明白了以后也就觉得不难了,只不过是刚开始的时候我不知道有重叠IO这个概念,知道了这个概念以后,就好多了.

 

然后比较棘手的一个问题就是python的嵌入了.python的嵌入的主要问题就是多线程同时回调,另外一个就是引用记数的正确控制.

我在网上查的时候发现很多人都对python嵌入后多线程回调这个问题很头疼.python本身这个方面感觉做的确实不是特别好,因为他的GC里面好象没有直接有这方面的控制,而需要用户在代码中加锁.用户首先需要调用PyEval_InitThreads()函数来进行对多线程支持的初始化,然后在线程中加入PyGILState_Ensure()和PyGILState_Release(state),只有在这两个函数之间调用python操作才是安全的,不然经常就会发现python的gc抛出fatal error.按照上面说的做了以后,程序就可以正确的执行了.但是本人还是觉得这是一个很大的问题.根据我的观察PyGILState_Ensure()和PyGILState_Release(state)之间的代码的执行应该是不能同时执行的,或者是同时执行的很少.这样就导致了由完成端口管理的线程池中的线程,在python逻辑函数的调用部分就是串行的,而处理中最耗时间的部分却正好就是python逻辑函数了.所以这是个弊病,但目前还不知道应该怎么处理.

 

内存管理方面,我用的方法比较简陋,准备有时间的话就好好的改进一下.毕竟一个好的服务器,内存管理的好坏是有决定性作用的.目前的方法就是归还复用的方法,用一个内存池来管理分配和回收内存,所分配的内存都是固定大小的内存块.

 

不过,至少目前已经有一个有点象样的东西可以用了,还是很开心的.

 

后面还要更加努力,努力成为高手

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值