有一个应用程序。它由许多 Verticle 组成。他们一个接一个地在一个链条中运行。以下每一项都是成功实施前一项的结果。很多。他们向外部系统提出几个请求。主会话以某个时间间隔开始。
我的问题是如果正在运行的会话没有时间完成会发生什么?它会停止吗?或者它会与下一个并行工作?如果两者都没有满足并且第三次会议开始?这一切都会导致系统过度过载吗?
有一个应用程序。它由许多 Verticle 组成。他们一个接一个地在一个链条中运行。以下每一项都是成功实施前一项的结果。很多。他们向外部系统提出几个请求。主会话以某个时间间隔开始。
我的问题是如果正在运行的会话没有时间完成会发生什么?它会停止吗?或者它会与下一个并行工作?如果两者都没有满足并且第三次会议开始?这一切都会导致系统过度过载吗?
这是一个非常理论的问题,但我会尽力解释。
假设您有任务链A1->A2->A3->A4
,这需要 4 秒,而您的新“会话”在 3 秒后开始。下一条链将是B1->B2->B3->B4
Vert.x 的运作方式是拥有一个任务队列。因此,在第二个周期开始时,您的队列将变为B4, B3, B2, B1, A4
一次循环之后,它将是C4, C3, C2, C1, B4, B3
等等。队列中的任务不消耗 CPU,但它们会消耗一些内存,所以最终你会用完它。
请注意,与现实生活相比,尤其是在考虑外部系统时,您的任务不会以完全相同的顺序退出队列。还有一个使用多反应器模式的 Vert.x 概念,因此您有多个队列。但想法是一样的。
现在您不会遇到“系统负载过大”,因为这些任务中的大多数都是空闲的,而且它们的内存占用相对较慢。您将体验到更多的内存泄漏。但这仍然是最好避免的情况。