Системная перегрузка по вертикали - PullRequest
0 голосов
/ 29 октября 2019

Есть приложение. Он состоит из многих статей. Они бегут один за другим в цепи. Каждое последующее является следствием успешной реализации предыдущего. Много их. Они делают несколько запросов к внешним системам. Основной сеанс начинается с интервалом времени.

Мой вопрос: что произойдет, если текущий сеанс не успеет завершиться? Это остановит? Или будет работать параллельно со следующим? А если оба не выполняются и начинается третий сеанс? Может ли это все привести к чрезмерной перегрузке системы?

1 Ответ

0 голосов
/ 30 октября 2019

Это очень теоретический вопрос, но я попытаюсь объяснить.

Скажем, у вас есть цепочка задач A1->A2->A3->A4, которая занимает 4 секунды, а ваша новая "сессия" начинается через 3 секунды. Следующая цепочка будет B1->B2->B3->B4

Работа Vert.x заключается в наличии очереди задач. Таким образом, в начале второго цикла ваша очередь станет B4, B3, B2, B1, A4

Один раз после этого цикл будет C4, C3, C2, C1, B4, B3

И так далее. Задачи в очереди не потребляют ЦП, но они потребляют некоторую память, поэтому в конечном итоге вы исчерпаете ее.

Обратите внимание, что чем в реальной жизни, и особенно когда рассматриваются внешние системы, ваши задачи выигранывыйти из очереди в том же порядке. И есть понятие, что Vert.x использует многореакторный шаблон, поэтому у вас есть несколько очередей. Но идея та же.

Теперь вы не будете испытывать «чрезмерную нагрузку на систему», поскольку большинство из этих задач будут простаивать, а их объем памяти будет относительно медленным. То, что вы испытаете, приведет меня к утечке памяти. Но это все еще ситуация, которую лучше избегать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...