在阻塞世界中,强烈建议设置激进的超时以便快速失败并释放底层资源(https://pragprog.com/book/mnee/release-it的第5.1节)。
在异步/非阻塞世界中,请求不会阻塞主线程,并且资源可立即用于进一步处理。超时仍然是必要的,但设置激进值仍然有意义吗?
答案 0 :(得分:1)
在实时软件中,与日常软件操作相比,机器上的网络请求或控制操作需要花费大量时间。例如,告诉步进电机前进到特定位置可能需要几秒钟,而正常操作可能需要几毫秒。让我们说一个典型的步进电机前进需要n
毫秒,而一个最大距离需要m
毫秒。
攻击性超时会计算n
并添加一个小的软糖因子,可能是10%,如果在那段时间内没有达到目标,则会很快失败。如您所述,激进超时将允许您释放资源。 m
加epsilon
的非主动超时会失败得更慢,并且会不必要地占用资源。
在异步软件世界中,成功与失败之间还有许多其他选择。异步操作也可以计算n
加10%,并设置进度条(如果需要用户反馈),然后显示估计目标结束的进度。达到超时后,进度条将满,但您可能会使其发出脉冲或更改颜色以指示其耗时超过预期。如果步进电机在m
毫秒后仍未达到目标,那么您可以宣布失败。
在其他情况下,如果反馈不重要,那么您当然可以使用m
加epsilon
作为超时。