дротик: io syn c против asyn c файловые операции - PullRequest
0 голосов
/ 12 апреля 2020

Существует несколько операций syn c и asyn c для файлов в dart:io:

  • file.deleteSync() и file.delete()
  • file.readAsStringSync() и file.readAsString()
  • file.writeAsBytesSync(bytes) и file.writeAsBytes(bytes)
  • и многие, многие другие.

Каковы соображения, которые я следует помнить при выборе между параметрами syn c и asyn c? Кажется, я вспоминаю, что где-то видел, что опция syn c работает быстрее, если вам все равно придется ждать ее окончания sh (например, await file.delete()). Но я не могу вспомнить, где я это видел или правда ли это.

Есть ли разница между этим методом:

Future deleteFile(File file) async {
  await file.delete();
  print('deleted');
}

и этим методом:

Future deleteFile(File file) async {
  file.deleteSync();
  print('deleted');
}

1 Ответ

0 голосов
/ 25 апреля 2020

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

  • Запуск кода в методе async не позволяет запускать его в другом потоке.
  • Dart - однопоточная система.
  • Код запускается по событию l oop.
  • Выполнение длительных синхронных задач блокирует систему, независимо от того, используется ли метод asyn c или нет.
  • Изолят - это одна нить.
  • Если вы хотите запускать задачи в другом потоке, вам нужно запустить его в другом изоляте.
  • Запуск другого изолята называется порождением изолята.
  • Есть несколько опции для запуска задач на другом изоляте, включая compute и IsolateChannel и написание собственного кода связи изолята .
  • для File IO синхронные версии работают быстрее, чем асинхронные версии.
  • Для тяжелых операций ввода-вывода файлов предпочтительнее асинхронные версии, поскольку они работают с отдельным изолятом.
  • для легких операций ввода-вывода файлов (например, file.exists()? ), можно использовать синхронную версию, поскольку она может быть быстрой.

Дополнительная информация

...