gpt4 book ai didi

dart - 我对 Dart 的 future 的理解是否正确?

转载 作者:行者123 更新时间:2023-12-03 02:50:05 25 4
gpt4 key购买 nike

我正在学习 Dart 的 Future,并阅读了一些关于 Future 的文章。

它说 Dart 是单线程的,我们可以使用 Future 让一些昂贵的函数稍后运行,例如读取文件。

假设读取一个文件需要 10 秒,我有 3 个文件要读取。

我的 Dart 代码:

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秒吧?使用 futures 读取文件只是为了让昂贵的任务在后面一个一个地运行,而不阻塞当前代码,但不会降低总成本吗?

如果在 java 中,我可以制作一个线程池,并让 3 个 future 任务并行运行,总成本将在 10 到 20 秒之间。

是否可以在 Dart 中做同样的事情?使用 Dart 的 isolate 是唯一的解决方案吗?

最佳答案

我预计这可能需要 10 秒,因为它将开始三个读取,每个读取都会在读取完成时排队到“then”函数的回调。这三个文件完全有可能并行加载并在 10 秒后全部完成。不过,回调将在主线程上按顺序调用。

虽然dart中的用户代码是单线程的(假设你没有使用isolates或者web worker),但是没有说实现不能创建线程或者使用操作系统的异步加载来并行执行任务只要 future 在主线程中按顺序运行。

关于dart - 我对 Dart 的 future 的理解是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21513023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com