Страница 119 из 171
Глава 49. Урок восьмой: Глубже в Тени
В программировании параллельная обработка — это когда процессор выполняет несколько задач одновременно. Каждое ядро занято своим процессом, и операционная система распределяет ресурсы между ними. Звучит просто. Но любой, кто писал многопоточный код, знает: это ад. Состояния гонки, deadlock'и, бесконечные переключения контекста, которые съедают производительность быстрее, чем ты успеваешь её оптимизировать. Unseen Presence стал для моего мозга такой же «многопоточностью». Один поток поддерживал ментальный фильтр — невидимость. Второй управлял телом — движением. Третий (в моём случае) анализировал окружение. И всё это — одновременно, без права на ошибку. Один сбой в синхронизации — и ты становишься видимым. Одна ошибка в логике — и твой силуэт мелькнет перед глазами врага. Один deadlock — и ты застываешь на месте, беспомощный и заметный. Две ночи на то, на что у других уходят месяцы. Самонадеянность? Возможно. Но за моей спиной уже дышал Финальный Суд.
— Cloak of Shadows — это статическая невидимость, — пояснил Силас. — Unseen Presence — динамическая. Разница принципиальная.
Мы стояли в Скриптории. За окном затянулась ночь, первая из трех оставшихся до Суда. Луна висела низко, заливая поляну серебристым светом, и тени от деревьев лежали на траве, как длинные чёрные пальцы. В камине догорали дрова — последняя крупица человеческого уюта, которую Силас не мог оставить даже спустя столетия.
Каэль сидел в углу — его присутствие ощущалось в Сети как тихая, настороженная музыкальная нота. Он знал, что сегодня я буду форсировать Obfuscate, — и волновался. Его «звук» дрожал высокими обертонами, как скрипичная струна перед тем, как лопнуть.
— Объясни механику, — попросил я.
— С Cloak of Shadows всё просто, — Силас поднял указательный палец. — Она использует одну функцию. Проекция ментального фильтра вовне. Ты создаёшь поле, которое заставляет чужой мозг игнорировать твоё присутствие. Мозг видит тебя, но сознание — нет. Ты стираешь себя из «кадра», как ты это называешь. Но фильтр работает, только пока ты неподвижен. Почему?
— Хм-м… Потому что движение — это изменение? — ответил я. — Мозг запрограммирован замечать изменения. Статичный объект — часть фона. Движущийся объект — угроза или добыча. Фильтр, настроенный на статику, ломается при динамике.
— Именно. — Силас поднял второй палец. — Unseen Presence добавляет вторую функцию. Ты не просто стираешь себя — ты стираешь восприятие своего движения. Это требует уже не одного фильтра, а двух, работающих параллельно. Первый фильтр — статический: «меня здесь нет». Второй фильтр — динамический: «воздух не колеблется там, где я прохожу», «тени не меняются от моего движения», «звук моих шагов — это просто шум ветра». И ты должен поддерживать оба фильтра одновременно, пока твоё тело двигается.
— Три потока, — сказал я. — Статический фильтр. Динамический фильтр. Моторный контроль.
— Для обычного вампира это два потока. Но ты хочешь еще и анализировать окружение, — Силас покачал головой. — Это три потока. Поэтому Unseen Presence обычно осваивают месяцами. Каждый поток требует концентрации, а вампирский мозг — не многозадачная машина. Он сосредоточен не более чем на одной задаче одновременно. Как… как одна из твоих «программ» без «многопоточности».
— А мой — многопоточный, — возразил я. — Три голоса. Три ядра. Если я смогу распределить нагрузку правильно, всё должно заработать. Современник управляет телом, Метагеймер анализирует окружение, Малкавиан поддерживает оба фильтра. Три потока, три исполнителя. Должно работать.
— «Должно» не значит «будет». — Силас отошёл к дальней стене — метров на десять от меня. — Начинаем. Активируй Cloak of Shadows. А потом — сделай шаг. Посмотрим, сколько ты продержишься.
Я закрыл глаза. Активировал Obfuscate. Cloak of Shadows включился привычно — знакомая пелена, отделяющая моё присутствие от чужого восприятия. Силас моргнул — я видел его ауру, — и его глаза потеряли фокус на том месте, где я стоял.
Теперь — шаг.
Я перенёс вес на правую ногу, поднял левую, сделал движение вперёд. И в то же мгновение реальность «треснула». Силас снова увидел меня.
— Недостаточно, — сказал он. — Твой Cloak прервался в момент начала движения. Ты слишком сильно переключил внимание с невидимости на контроль тела. Фильтр упал — ты стал видимым. Нужно делать это параллельно. Одновременно.
— Еще раз.
Я попробовал другую стратегию. Вместо того чтобы думать о двух задачах как о «переключении контекста» — представил их как два процессорных ядра. Ядро-один: Малкавиан, Obfuscate. Ядро-два: Современник, движение. Шина данных между ними — Сеть. Управляющая программа — Метагеймер.
Шаг. Ещё шаг. Третий. Я двигался предельно медленно, чувствуя, как ментальное напряжение вибрирует внутри черепа, грозя сорваться в хаос. Но фильтр держался.
— Силуэт, — сказал Силас. Его глаза следили за чем-то — не за мной, но за искажением воздуха там, где я прошёл. — Я видел размытое движение. Не тебя — тень. Как будто пространство стало плотнее в том месте, где ты находишься. Это уже лучше, но недостаточно, опытный наблюдатель всё равно тебя почует.
Ещё двадцать попыток. Двадцать провалов.
Это было похоже на отладку многопоточного приложения в реальном времени — только ценой ошибки был не Segfault (ошибка сегментации), а смерть на Суде. Каждая попытка съедала ментальный ресурс, как неоптимизированный код съедает процессорное время. К середине ночи я чувствовал себя опустошенным — не физически, а именно когнитивно. Три потока сознания работали на пределе, и Метагеймер докладывал: «Перегрузка. Ментальный ресурс на исходе. Рекомендация: перерыв на восстановление.»
Но времени на отдых не было.
Я решил сменить саму архитектуру процесса. Вместо того чтобы разделять внимание между невидимостью и движением, я попытался слить их в единое целое. Не «я прячусь и двигаюсь», а «мое движение само по себе является частью невидимости». Каждый шаг, каждый поворот головы должен был стать естественным продолжением фильтра. Движение не было отдельной задачей — оно было свойством Obfuscate.
И тут что-то щелкнуло.
Буквально — я почувствовал этот ментальный щелчок, как будто два провода, которые я безуспешно соединял всю ночь, наконец-то встали в правильные разъёмы. Фильтр Obfuscate расширился — он больше не просто стирал моё присутствие, он поглощал все сенсорные следы моего движения. Шелест ткани. Колебание воздуха. Искажение теней. Всё это попадало в тот же ментальный фильтр и стиралось из восприятия наблюдателя.