Ночь из урока 46 шла одним муравьём: строка за строкой. Отчёт выходил правильным, потому что никто не мешал. Сегодня муравьёв много, и каждый кусок отчёта кто-нибудь трогает одновременно с кем-нибудь ещё. Задача раздела в одной фразе: работа вперемешку, результат как по порядку.
Что нужно башне
Тесты накопительные. Сверху одна вещь в src/hub.ts.
stormNight(lines, limit), ночь вперемешку. Строки разбираются все, мусор идёт в отчёт по тегу, как вdecodeSplitиз урока 63. Кадры обрабатываются одновременно, не большеlimitсразу. Повтор узнаётSeenиз урока 65 одним шагом, поэтому второй экземпляр кадра не уходит в ответ, даже пока первый ещё ждёт провода. Каждый кадр проходитcheckFrameиrespond, и его исход башня разбирает, как в боссе EF4.- Отчёт тот же, что у
processNight. Те же исходы, те же ошибки, те же призраки в том же порядке, те же дубли и сбои. На ночи из ста строк и с проводом, который отвечает с разной задержкой, порядок ответов каждый раз другой, а отчёт один. - Ошибок в типе нет, в
Rпровод, книга иSeen.
Чек-лист перед сдачей
- Тесты всех живых прошлых этапов зелёные.
- Отчёт ночи из ста строк равен отчёту
processNightна той же ночи, и набор отправленных строк тот же. - В работе одновременно больше одного кадра, но не больше
limit. - Двадцать одинаковых кадров при
limit = 100: ответ ушёл один, дублей девятнадцать. - Призраки в отчёте в порядке строк, хотя проверялись вперемешку.
Башня, этап 35
Работа вперемешку, отчёт по порядку
Подумай до кода, где в ночи могут столкнуться два муравья.
- Дубли. Два экземпляра кадра идут одновременно. Если «видел ли я его» и «запомнить» это два шага, оба увидят «нет». Нужен один шаг:
Ref.modify. - Счёт. Сто муравьёв пишут в один отчёт. Можно класть его в
Refи обновлятьupdate, а можно не делить отчёт вовсе: пусть каждый кадр отдаёт свою судьбу значением,forEachсоберёт судьбы в порядке строк, а отчёт сложится обычным циклом после. Второй путь проще проверить: состояние общее только уSeen. - Предел. Ограничивает
concurrencyуforEach. Если провод общий для нескольких частей башни, предел ставят на провод,throttledиз урока 67, но сегодня провод у ночи один.
Практика
Итог
Утром Рыдкулл кладёт рядом два отчёта: ночь по одному кадру и ночь вперемешку. Цифры совпадают до строки.
Пондер стоит у трубок Гекса. Муравьи бегут быстро, но больше никто не сталкивается лбами.
Дальше
Ночью на башне останавливаются часы. В дверь стучат: на пороге высокая сухая женщина с расписанием в руках и связкой ключей от часового механизма.
Следующий раздел курса это EF8 «Часы на башне»: расписания, повторы, таймауты и тестовые часы. Начинается он с урока 72.