2017-09-05 24 views
0

在阻塞的世界中,强烈建议设置激进的超时以便快速失败并释放底层资源(https://pragprog.com/book/mnee/release-it的第5.1节)。在反应式编程中使用激进超时的好处

在异步/非阻塞的世界中,请求不会阻塞主线程,并且资源立即可用于进一步处理。超时仍然是必要的,但是设置激进值还是有意义的吗?

+1

无论如何都需要超时。例如,让我们假设你在网络中做了一些事情;无论是异步还是非阻塞都无所谓,你永远不会知道结果......所以你希望建立一个窗口,让事情被视为成功与否。 –

回答

1

在实时软件中,机器上的网络请求或控制操作与日常软件操作相比需要大量时间。例如,告诉步进电机前进到特定位置可能需要几秒钟,而正常操作可能需要几毫秒。假设典型的步进电机前进需要n毫秒,而最大距离需要的时间为m毫秒。

积极超时会计算出n并增加一个小巧的因素,可能是10%,如果在那段时间内没有达到目标,就会很快失败。如您所述,积极超时将允许您释放资源。 m加上epsilon的非积极超时会失败得慢得多,并且不必要地占用资源。

在异步软件世界中,成功与失败之间还有其他许多选择。异步操作也可能会计算出n加上10%,并建立一个进度条(如果需要用户反馈),然后向估计的目标结束时显示进度。达到超时时,进度条会变满,但您可能会导致它发生脉冲或改变颜色,以指示其花费的时间比预期的要长。如果步进电机在m毫秒后还没有达到目标,那么您可以宣布失败。

在其他情况下,如果反馈并不重要,那么您肯定可以使用m加上epsilon作为超时。

相关问题