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