Перейти к содержимому

Общая память

Переменные соседа не видны никому. Ячейка видна всем, кто к ней подключён — на этом и строят разделение труда

среднийНужно знать: Запись в ячейку, Связи и getlink

У процессоров нет общих переменных. Совсем: медь в одном и медь в другом — два разных значения, и узнать чужое нельзя ничем. Зато ячейка памяти — обычный блок, и подключиться к ней могут оба.

тик 0
Информация0
=
у
Ввод1
@counter0number
медьnullnull

На карте два процессора. Верхний спрашивает склад и кладёт ответ в ячейку; нижний берёт его оттуда и печатает. Связи у них разные: у верхнего склад и ячейка, у нижнего — ячейка и табло. Общая у них только ячейка.

Запас инструкций у процессора свой — @ipt за тик, — и потратить его можно только на себя. Два процессора работают параллельно, и это единственный способ ускорить логику:

  • медленная часть (обход связей, поиск радаром) живёт в одном процессоре и кладёт итог в память;
  • быстрая часть (рисование на дисплее, ведение юнита) живёт в другом и берёт готовое.

Второй при этом не ждёт первого: он читает то, что лежит, и если там прошлое значение — работает с ним.

Ячейка не умеет сказать «данные свежие» или «сейчас идёт запись». Всё, что есть, — места и значения; смысл им придаёт уговор между программами, и записан он только в голове автора.

Отсюда простое правило: адреса стоит подписать — комментарием в программе или на бумаге.

Адрес Что лежит
0 меди на складе
1 сколько ждём
2 флаг: нужен подвоз
  • Ячейка — 64 места, размер 1×1: хватает на уговор из нескольких чисел.
  • Блок памяти — 512 мест: списки, очереди, таблицы.
  • Сам процессор — переменные соседа по именам, без лишнего блока на карте; об этом следующий урок.
  • Блок сообщений — только текст и только для человека: программа читать его не умеет.

Обратная сторона: любой процессор, подключённый к ячейке, может в неё писать. Защиты нет, и случайная запись по чужому адресу выглядит как «данные портятся сами».

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.