非阻塞单线程的通讯程序能改为多线程的吗?
我有一个dll,里面有一个导出类,处理所有的网络通讯问题,然后通过事件把接收到的没有错误的数据传给主程序,大概的逻辑程序是这样的
onread
读取数据包
验证数据包
把没有错误的数据包通过事件发送给主程序
--------------
这个是单线程的非阻塞实现的,现在有一个问题:当onread中处理很频繁的时候,主程序的相应非常不好,并且还有接受缓冲区满的情况,那么我可以不可以改造以下这样的:
onread:
读取数据包
验证数据包
把没有错误的数据包发送给一个队列
新开一个线程thread:
读取队列中的数据
把没有错误的数据包通过事件发送给主程序
------------------
这样程序就变成了多线程的,请问这样能达到我要的效果吗?
[解决办法]
可以缓解主程序的响应情况。
但收包太快时,队列会满,这时要考虑丢包策略,或者改变传输速度。
[解决办法]
主线程之负责接收和记录当前状态,那剩下的事情都交给子线程来做就可以缓解主线程的压力了。