gpt4 book ai didi

flutter - flutter 在什么线程/隔离上运行 IO 操作?

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

例如在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);
}

我已阅读The engine architecture这表明引擎中有4个线程

  • 平台任务运行程序
  • UI 任务运行器
  • GPU 任务运行程序
  • IO 任务运行程序

主应用程序 dart 代码在 UI Task Runner 线程上运行。 IO任务运行器似乎只是让dart引擎读取图像处理耗时的图像IO而不是应用程序IO发生的地方?

我知道 IO 库具有基于 Future 的无阻塞接口(interface),因此我提供给 IO 库的回调将在 UI 线程上运行,但实际 IO 操作本身是否存在 Dart VM 正在使用的操作系统线程进行这些操作?

例如,如果我尝试上传/下载 800MB 视频文件,Dart VM 是否使用后台 IO 线程来执行实际 IO?

是否应该使用单独的隔离来进行大型 IO 操作,例如上传/下载大文件?

最佳答案

Dart 使用线程池处理 IO 请求。为了找到答案,我必须克隆 Dart SDK 并查看源代码,因为我无法从文档中找到答案。

当调用 IO 方法时,会调用 File 实现 _File 类方法。它创建一个到 native 代码的端口 (IOService_NewServicePort) 并将 IO 请求 id 和 args 发送到 native 代码。 native 代码使用线程池( runtime\vm\native_api_impl.cc#Dart_NewNativePort )处理 IO 请求,将任务提交到线程池中。然后 native 代码一路返回到 Dart 代码,并且 _File 返回一个 future 对象。 IO操作完成后,通过之前创建的端口将结果从native发送回Dart。这会触发在端口上注册的处理程序,并解决 future 问题。

关于flutter - flutter 在什么线程/隔离上运行 IO 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56906744/

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