IOCP服务端框架(含调用源代码例子)重新设计后,性能提升的难以相信,稳定性也很靠谱,聊聊我的设计思路吧!

本文介绍了IOCP服务端框架的设计思路,包括IO线程与任务线程分离、循环缓冲机制、错误处理和资源回收策略、包协议检测以及业务接入方法。性能测试显示响应时间优异,提出限制互斥锁使用以提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,设计思路
1、设计模式;
      IO收发线程与EMPLOY任务线程必须分离设计,否则如果只考虑IO线程来处理所有事情的话,一旦出现某个业务接口运行较慢,势必造成对IO网络的堵塞,那么这样的后台服务又有什么用呢?
      EMPLOY任务线程指派算法,要看具体业务来定,如果所有业务实现数据传输量大小差不多,反应时间长短都差不多的话,可以采取平均顺序分配的方式,否则可以按照业务具体调用来指派某一个或多个EMPLOY任务线程来处理。
      如果再做的好一点的话,应该对每个EMPLOY任务线程进行监视,如按照已有任务队列长度来决定分配哪个线程。
2、性能保证;
      必须保证正常通信过程中,各个连接、各个线程之间基本没有共享数据锁机制,否则性能肯定大打折扣;
      对于Buffer访问机制,应该采取类似Linux内核技术的循环缓冲机制,其最大特点就是如果同时只有一个写线程和读线程时,此循环缓冲不用加任何互斥锁机制,这样性能才会保证;
      对于socket本身进行的一些参数优化,如:设置SO_SNDBUF为零,可以减少用户态到内核态的复制CPU耗时。
3、错误处理;
      IOCP最大的难点之一,就是在连接断开情况下的资源回收,推荐两种办法:
      3.1、采取延时回收策略,在保证所有Buffer对象都在一定时间内回到队列后,再释放该连接的所有资源,前提是要看你的业务接口运行速度了,一般30秒左右应该足够了吧?!
      3.2、采取即时回收策略,但是必须对多线程情

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值