0

我已经构建了一个网络层,它使用 SAEA 套接字命令来处理 IOC 容器的多个连接。该网络层使用一种心跳形式通知服务器客户端感兴趣的主题。

我的问题是,有时在网络层之上运行的进程之一会占用 CPU。这可以防止心跳被及时调用,服务器将看到来自客户端的订阅。我正在使用 System.Threading.Timer 来运行心跳发送。

事实证明,违规过程是数学计算,而不是 IO 限制(我的同事从数据库预加载数据,奇迹般地不会堵塞网络。)他正在使用 Parallel.For 循环进行计算,你可以看到当它到达循环时,CPU 使用率会跳跃。

我尝试了几件事,但没有运气:

  1. 只需减少循环上的 MaxDegreeOfParallelism。
  2. 添加具有较低优先级的调度程序,如下所示:http: //blogs.microsoft.co.il/blogs/bnaya/archive/2011/01/29/how-to-schedule-task-on-different-thread-priority .aspx

确保心跳消失的其他策略是什么?与消耗 CPU 的数学函数相比,它确实没有太多工作。

4

0 回答 0