我构建了一个网络层,该层使用SAEA套接字命令处理IOC容器的多个连接。此网络层使用一种心跳形式,通知服务器客户端感兴趣的主题。
我的问题是,有时在网络层之上运行的其中一个进程会占用CPU。这可以防止心跳被及时调用,服务器将看到来自客户端的订阅。我正在使用System.Threading.Timer来运行心跳发送。
事实证明,违规过程是数学计算,而不是IO限制(我的同事从DB预加载数据,奇迹般地不会堵塞网络。)他正在使用Parallel.For循环来进行计算,并且你可以看到CPU使用率在它到达循环时跳跃。
我尝试了几件事,没有运气:
确保心跳消失的其他策略是什么?与耗尽CPU的数学函数相比,它确实没什么用。