FFORGE//RS
← Маршрут

rust / УРОВЕНЬ 4

Future, заморившая правую ветвь

ОЦЕНКА45 МИН
01

ТЕОРИЯ / ВОСПРОИЗВЕДЕНИЕ

Что нужно восстановить

  • Объяснять контракт Future poll/Waker
  • Справедливо опрашивать независимые child Future без busy-wait
  • Не опрашивать завершённую child повторно

Pending — контракт планирования

`Future::poll` должен быстро вернуть результат. Pending означает, что Future пока не готова и зарегистрирует Waker; spin, блокировка executor или безусловный wake расходуют capacity.

Join-combinator владеет двумя автоматами

Каждая независимая child получает шанс продвинуться за внешний poll. После Ready результат сохраняется, child больше не poll; outer Future готова лишь после обеих.

КОНТРОЛЬНАЯ ТОЧКА

Левая child вернула Pending, а независимая правая готова. Что делать join-combinator в этом poll?

ISOLATED RUST 1.96
src/lib.rsРЕДАКТИРОВАНИЕ

02 / ОТЛАДКА

Найдите и исправьте дефект

Исправьте `JoinReady::poll`: каждая незавершённая child опрашивается не больше раза за outer poll, Ready-child больше не poll, join готова после обеих. Реализация safe и non-blocking.

Инициализация редактора…
ОБЛАЧНЫЙ SANDBOXсеть выключена · 256 МБ · 12 с
2 / 64 KB
ВЫВОД
Runner ждёт отправки кода.