C++ 如果进程在事件之间空闲,为什么延迟会大得多?

C++ 如果进程在事件之间空闲,为什么延迟会大得多?,c++,linux,performance,optimization,latency,C++,Linux,Performance,Optimization,Latency,我有一个进程被套接字阻塞。当套接字中的输入变为可用时,进程将对输入进行解码,大多数情况下除了更新内存中的结构外什么也不做。周期性的输入会触发更复杂的分析,最终导致在另一个连接上传出消息。在后一种情况下,我希望最小化延迟,即最小化接收和发送之间的时间。我注意到,当两个有趣事件之间的时间增加时,延迟数是原来的2倍。这是什么原因?我如何改进?我已经尝试为我的进程保留一个CPU,但没有看到太多的改进。您应该尝试将进程“调整”为负值。我不知道Linux调度器的详细情况,但通常的策略是在进程无法使用其切片时

我有一个进程被套接字阻塞。当套接字中的输入变为可用时,进程将对输入进行解码,大多数情况下除了更新内存中的结构外什么也不做。周期性的输入会触发更复杂的分析,最终导致在另一个连接上传出消息。在后一种情况下,我希望最小化延迟,即最小化接收和发送之间的时间。我注意到,当两个有趣事件之间的时间增加时,延迟数是原来的2倍。这是什么原因?我如何改进?我已经尝试为我的进程保留一个CPU,但没有看到太多的改进。

您应该尝试将进程“调整”为负值。我不知道Linux调度器的详细情况,但通常的策略是在进程无法使用其切片时减少时间切片(有时是一个数量),反之亦然。这称为多级反馈策略。在您的情况下,获得一系列快速处理的事件可能会给流程带来非常短的时间片。当一个“重要”事件发生时,它将不得不通过几个上下文交换,逐步升级到一个较长的片段。将“nice”值设置得足够高可能会给它所需的任何时间片


不幸的是,在大多数系统中,“负精确性”需要超级用户权限。

您能展示一些代码来更好地说明这种情况吗?经过更多测试,我认为这只是指令缓存变冷了。