如何设计这种类型的自旋锁?
客户端
1、系统环境是多核的
2、网络延迟在50-500毫秒不等
3、程序是多线程的
4、其中一个线程要处理网络的消息(需要2-3秒左右)
现在出现的问题和需要的方法可以描述为这样
线程的循环周期是200毫秒,线程里面主要 处理包的数据 需要2-3秒左右,但是网络延迟不确定,有时候上个数据包处理好之后 准备接新的数据包,但是需要服务器端确认,如果服务器延迟时间长,没有确认,那么客户端又要准备接新的数据包处于等待状态,然后要这样好几次才可以开始新的处理包的数据,这样大量的时间就在等待中浪费了,如果用自旋锁是否可以解决这个问题,应该怎么处理比较合适?
方便理解我画个图:
客户端 ----------- 服务器端
处理数据中(2.5秒) 检测是否连接
处理完毕 请求新数据 ----(等待 延迟时间 再确认,比如300毫秒)
线程周期结束 检测没有得到请求数据 ----请求包被接受,发返回包
发新的请求数据 ----(等待 延迟时间 再确认,比如300毫秒)
线程周期结束 检测没有得到请求数据 -----发返回包当中------
发新的请求数据 ----(等待 延迟时间 再确认,比如300毫秒)
得到第一次的返回包 -----(第一次和第二次请求不同 ,重新确认)
=========================================================================
这样多次的 请求 和发送返回包 才可以达到第二次新的数据包的处理
我现在想 发新的请求数据 进行自旋锁的操作,就是发送第一次的数据包之后,等待2-3个线程周期,进行第2次发包。不知道这样是否可以避免上面的状况?
还有遇到这个问题应该如何解决 ,有没更好的办法?
多核 自旋 延迟
[解决办法]
这个属于流程逻辑问题,不属于代码逻辑问题,
用时间来等,不如用信号来等,任何一方处理完了,就回个信号,对方收到信号,进入下一步.没有下一步也给个信号,不是说0.3秒没数据回来就认为没有下一步了.