我们都知道,在Flutter
开发中,App
是单线程
运行的,那既然是单线程
运行,那么它能否做到并发处理多个任务呢?答案是可以的,首先,我们先来了解isolate
。
isolates
之前从事iOS
开发,或者其他平台App开发的人员,在App运行时,都会有一ios系统个主线程,可以开启多个子线程进行多个任务并发执行。在Dart
中,所有代码都运行在isolate
中,每个isolate
都JSON有单线程它们各自的内存堆栈
,确保每个isolate
的ios15状态都是独立的,互不影响。因为isolate
之间没有共享的内存空间
,所以,我们就不用使用各种锁
来保证数据的安全性。
Maijson格式怎么打开n isolate
默认情况下,所有的Dart
代码都在maios越狱in isolate
中。
通过使用 async-awjson格式怎么打开ait
等待异步操作完成,然后继续执行下一行代码,即使是单隔离程序也可以顺利执行。一个良好的App,会启动很快,然后开启EventLoop来响应Ev安全模式怎么解除ent队列中的Event事件。
isolate的生命周期
如下图所示,每一个isolate由某安全教育手抄报些Dart
代码开启。例如m通信行程卡ain()
方法。在isolat安全e
中会注册一些事件监听者
,处理用户的交互操作
或者文件的I/O操作
。当处理完 Event事件,返回结果,该isolate
就会退出。
处理Event
在客户端App中,在main isolate
的Event queue
中,会包含多个Repaint
请求,一些UI事件或者Button回调事件。 Event Loop
会按照Event Queue先入先出
的顺序,处理Event
事件。
当 main()
调用时,就会执行Event Handler
,如下图所示:
需要注意的是,如果某个EventHandler
的同步操作,安全教育平台作业登录耗时太长,就会造成App响应卡顿,如下图所示,Tap Handler
耗费了太多时间,超过了预期处理时间就会造成响应卡顿。
Worker isolate
当处理耗时的计安全教育平台登录算
,例如处理一个较大的JSON数据时。此时我们可以开启另外一个isolate
进行JSON数通信工程专业据解析,我们称这个worker isolate
为background isolate
,当这个worker isolate
执行完成后,将结果返回给main isolate
。
需要注意的是,在isolate
之间传递的数安全据,需要满足sendable
,ios越狱关于哪些对象满足sendable
状态,大家可以参考 send()method API 说明。
worker isolate示例
void main() async {
// Read some data.
final jsonData = await _parseInBackground();
// Use that data
print('Number of JSON keys: ${jsonData.length}');
}
// Spawns an isolate and waits for the first message
Future<Map<String, dynamic>> _parseInBackground() async {
final p = ReceivePort(); // 1
await Isolate.spawn(_readAndParseJson, p.sendPort); // 2
return await p.first as Map<String, dynamic>; // 3
}
Future<void> _readAndParseJson(SendPort p) async {
final fileData = await File(filename).readAsString();
final jsonData = jsonDecode(fileData);
Isolate.exit(p, jsonData);
}
- 1,在创建
isolate
之前,先创建一个ReceievePort
,用来从worker isolate
向main isolate
传递数据。 - 2,使用
Isolate.spawn()
创建一个新isolate
,用来执行_readAndParseJson
操作。 - 3,一旦isolate创建完成,
main isolate
开始等待work isolios下载atios下载e
传递最后的处理结ios模拟器果。
main isolate
和work isolate
之间的通信如下图所示
本篇文章关于isolate
的介json解析绍就先ios系统到这,了解更多,可参考Dart官方文档。
本篇文章参考Dart官方文档 isolates