Я изучаю будущее Дарта и прочитал несколько статей о Future
.Правильно ли я понимаю будущее Дарта?
В нем говорится, что Дарт является однопоточным, и мы можем использовать Future
, чтобы выполнить некоторые дорогие функции позже, например. чтение файлов.
Предпочитаете читать файл будет стоить 10 секунд, и у меня есть 3 файла для чтения.
Мой дротик Код:
main() {
readFile("aaa.txt");
readFile("bbb.txt");
readFile("ccc.txt");
print("Will print the content of the files later");
}
readFile(String filename) {
File file = new File(filename);
file.readAsString().then((content) {
print("File content:\n");
print(content);
});
}
Поскольку чтение файла будет стоить 10 секунд, так что приведенный выше код будет стоить не менее 30 секунд, не так ли? Использование фьючерсов для чтения файлов просто для того, чтобы дорогостоящие задачи выполнялись позже один за другим, без блокировки текущего кода, но не снизили общую стоимость?
Если в java я могу создать пул потоков и выполнить 3 будущие задачи, выполняемые параллельно, общая стоимость будет составлять от 10 до 20 секунд.
Можно ли сделать то же самое в Дарте? Использует ли изоляция Dart единственное решение?
Я сомневаюсь в этом «Когда один из ваших асинхронных путей ждет сетевой запрос или файловая система, возвращающая данные, другой путь async может заходить и запускаться в то же время». Есть ли в нем статья/документ/код? Я думал, что если одна задача не будет завершена, другая задача не будет работать, даже если она ждет IO – Freewind
Если вы вызываете функцию API, которая имеет обратный вызов (http-запрос или доступ к файлам, ...), вы зарегистрируйте обработчик для обратного вызова и закончите путь, который возвращает элемент управления в цикл событий, и начнется следующая задача. Ваш путь начинается снова, когда происходит обратный вызов. Это понимание, которое я имею - может быть, конечно, неправильно. Должно быть похоже на совместную многозадачность. –
Я еще не нашел документы об этом. –