Sobes.tech
Назад к вопросам
Junior — Middle
113

Какое количество изолятов автоматически создается фреймворком Flutter при его запуске?

Компании, где спрашивали
Pashapay

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

При запуске Flutter-фреймворк автоматически создаёт один изолят — основной UI-isolate. Именно в нём выполняется весь код приложения по умолчанию. Дополнительные изоляты создаются вручную, если нужно вынести тяжёлые вычисления или фоновые задачи.

Определение:

Isolate в Flutter/Dart — это отдельный поток исполнения с собственной памятью и event loop. Изоляты не разделяют память между собой, поэтому общение между ними происходит через передачу сообщений. При старте приложения Flutter автоматически поднимает один главный изолят, который отвечает за UI и основную логику приложения.

Пример использования:

Например, приложение загружает большой JSON и парсит его не в главном изоляте, а в дополнительном, чтобы не блокировать интерфейс.

import 'dart:isolate';

void heavyParse(SendPort sendPort) {
  final result = List.generate(1000000, (i) => i * 2);
  sendPort.send(result.length);
}

void main() async {
  final receivePort = ReceivePort();
  await Isolate.spawn(heavyParse, receivePort.sendPort);

  final length = await receivePort.first;
  print('Parsed items: $length');
}

Пояснение кода:

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

  1. ReceivePort создаётся в основном изоляте для получения сообщения.
  2. Isolate.spawn(...) запускает функцию heavyParse в отдельном изоляте.
  3. Внутри heavyParse выполняется тяжёлая работа.
  4. Результат отправляется обратно через SendPort.
  5. Основной изолят получает сообщение через receivePort.first.

Ключевые моменты:

  • Flutter при запуске автоматически создаёт один основной изолят.
  • Этот изолят обрабатывает UI и основной код приложения.
  • Дополнительные изоляты создаются только вручную.
  • Изоляты не разделяют память, между ними передаются только сообщения.
  • Для тяжёлых задач изоляты помогают не блокировать интерфейс.