Вычислительные системы

Вычислительная система выполняет программы, хранит состояние и обменивается данными с внешней средой.

Состав

  • процессор выполняет инструкции;
  • регистры и кэши держат данные рядом с ядром;
  • оперативная память хранит рабочее состояние процессов;
  • постоянное хранилище переживает выключение;
  • устройства ввода-вывода связывают систему с сетью, дисками и пользователем;
  • интерконнекты передают адреса, данные и управляющие сигналы;
  • операционная система распределяет ресурсы и изолирует процессы.
flowchart LR
    CPU["CPU / кэши"] <--> RAM["Оперативная память"]
    CPU <--> IO["Контроллеры I/O"]
    IO <--> NET["Сеть"]
    IO <--> DISK["Хранилище"]
    IO <--> UI["Устройства ввода-вывода"]

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

Иерархия памяти

Чем ближе уровень к CPU, тем обычно меньше ёмкость и задержка:

регистры -> L1/L2/L3 -> RAM -> SSD -> удалённое хранилище

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

Централизованная система

Вычисления и основное состояние сосредоточены в одном узле или тесно связанном компьютере.

Плюсы: проще согласованность, диагностика и транзакции. Минусы: вертикальный предел ресурсов и крупная область отказа.

Распределённая система

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

Сеть нельзя считать «медленной функцией»: ответ может потеряться после успешной обработки, поэтому клиент не знает, можно ли безопасно повторить запрос.

Что важно Java-инженеру

  • CPU-bound и I/O-bound нагрузка требуют разных моделей параллелизма;
  • выделение памяти и локальность отражаются на GC и кэшах;
  • системный вызов и сеть гораздо дороже операции в регистре;
  • увеличение числа потоков не создаёт дополнительные ядра;
  • в распределённой системе отказ бывает частичным.

Связано: Сети передачи данных, Системы отображения информации.

Самопроверка

  • Почему кэш процессора влияет на структуру данных?
  • Чем частичный отказ отличается от падения процесса?
  • Когда централизованное решение предпочтительнее распределённого?