ams*_*ams 7 dart dart-isolates flutter
例如,在使用 http 包或进行常规 IO 操作时出现抖动
import 'package:http/http.dart' as http;
http.Response response = await http.get(url);
if (response.statusCode == 200) {
var json = jsonDecode(response.body);
}
Run Code Online (Sandbox Code Playgroud)
主应用程序 dart 代码在 UI Task Runner 线程上运行。IO 任务运行器似乎只是让 dart 引擎读取图像处理耗时的图像 IO 而不是应用程序 IO 发生的地方?
我知道 IO 库具有基于 Future 的无阻塞接口,因此我提供给 IO 库的回调将在 UI 线程上运行,但是实际的 IO 操作本身是否存在 Dart VM 用于执行这些操作的操作系统线程操作?
例如,如果我尝试上传/下载一个 800MB 的视频文件,是否有 Dart VM 使用的后台 IO 线程执行实际 IO?
是否应该将单独的隔离用于大型 IO 操作,例如上传/下载大文件?
Dart 使用线程池处理 IO 请求。为了找出答案,我必须克隆 Dart SDK 并查看源代码,因为我无法从文档中找到答案。
当调用 IO 方法时,会调用 File 实现_File
类方法。它创建一个端口到本机代码 ( IOService_NewServicePort
) 并将 IO 请求 id 和 args 发送到本机代码。本机代码使用线程池 ( runtime\vm\native_api_impl.cc#Dart_NewNativePort
)处理 IO 请求,将任务提交到线程池中。然后原生代码一直返回到 Dart 代码并_File
返回一个 future 对象。IO操作完成后,结果通过之前创建的端口从native发回Dart。这会触发在端口上注册的处理程序并解析未来。
归档时间: |
|
查看次数: |
803 次 |
最近记录: |