Как продолжительность жизни 'stati c влияет на долговременную память? - PullRequest
0 голосов
/ 31 марта 2020

Я хотел бы иметь программу, которая выполняет миллион асинхронных задач в течение длительного периода времени. Я хочу динамически управлять параллелизмом, но мы можем представить более простую версию с параллелизмом 20.

Я создал систему, которая использует tokio::task::spawn для каждой из этих асинхронных задач. tokio::task::spawn требует Future со сроком службы 'static. Если я каким-то образом сделаю свои фьючерсы стати c, как это повлияет на долгосрочное потребление памяти моей программой? Будет ли какое-то накопление памяти о фьючерсах, которые уже ожидались? Или единственное, что на самом деле накапливается, - это то, что делает это будущее 'static?

Могу ли я передать в каждое будущее где-нибудь фиктивные данные c, такие как &str, чтобы создать будущее состояние c но не держите память после того, как это ожидается? Мне здесь не хватает базового понимания.

1 Ответ

1 голос
/ 01 апреля 2020

Отвечая на ваш вопрос

Как правило, любая ссылка 'static действует в течение всего срока службы программы; оно освобождается только после выхода main.

Если у вас есть много различных значений, которые имеют время жизни 'static (то есть они не являются всеми ссылками на одно общее значение), каждое из них займет некоторое количество памяти. Как правило, этот объем памяти постоянен на протяжении всей жизни вашей программы и должен легко учитываться.

См. Также:

Ответ на вашу проблему

Ничто в будущем не требует, чтобы у вас был 'static срок службы. То, что вы цитируете, является связью с обобщенными c типами, в которых говорится, что любые ссылки настоящего должны иметь время жизни static. Это не значит, что ссылка обязательна. Вместо этого используйте собственные значения.

См. Также:

...