我们都知道,在Flutter开发中,App单线程运行的,那既然是单线程运行,那么它能否做到并发处理多个任务呢?答案是可以的,首先,我们先来了解isolate

isolates

之前从事iOS开发,或者其他平台App开发的人员,在App运行时,都会有一ios系统个主线程,可以开启多个子线程进行多个任务并发执行。在Dart中,所有代码都运行在isolate中,每个isolateJSON单线程它们各自的内存堆栈,确保每个isolateios15状态都是独立的,互不影响。因为isolate之间没有共享的内存空间,所以,我们就不用使用各种锁来保证数据的安全性。

Maijson格式怎么打开n isolate

默认情况下,所有的Dart代码都在maios越狱in isolate中。

Dart并发编程: isolate

通过使用 async-awjson格式怎么打开ait 等待异步操作完成,然后继续执行下一行代码,即使是单隔离程序也可以顺利执行。一个良好的App,会启动很快,然后开启EventLoop来响应Ev安全模式怎么解除ent队列中的Event事件。

isolate的生命周期

如下图所示,每一个isolate由某安全教育手抄报Dart代码开启。例如m通信行程卡ain()方法。在isolat安全e中会注册一些事件监听者,处理用户的交互操作或者文件的I/O操作。当处理完 Event事件,返回结果,该isolate就会退出。

Dart并发编程: isolate

处理Event

在客户端App中,在main isolateEvent queue中,会包含多个Repaint请求,一些UI事件或者Button回调事件。 Event Loop会按照Event Queue先入先出的顺序,处理Event事件。

Dart并发编程: isolate
main()调用时,就会执行Event Handler,如下图所示:

Dart并发编程: isolate
需要注意的是,如果某个EventHandler 的同步操作,安全教育平台作业登录耗时太长,就会造成App响应卡顿,如下图所示,Tap Handler耗费了太多时间,超过了预期处理时间就会造成响应卡顿。

Dart并发编程: isolate

Worker isolate

当处理耗时的计安全教育平台登录,例如处理一个较大的JSON数据时。此时我们可以开启另外一个isolate进行JSON数通信工程专业据解析,我们称这个worker isolatebackground isolate,当这个worker isolate执行完成后,将结果返回给main isolate

Dart并发编程: isolate

需要注意的是,在isolate之间传递的数安全据,需要满足sendableios越狱关于哪些对象满足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 isolatemain isolate传递数据。
  • 2,使用Isolate.spawn()创建一个新isolate,用来执行_readAndParseJson操作。
  • 3,一旦isolate创建完成,main isolate开始等待 work isolios下载atios下载e传递最后的处理结ios模拟器果。

main isolatework isolate之间的通信如下图所示

Dart并发编程: isolate

本篇文章关于isolate的介json解析绍就先ios系统到这,了解更多,可参考Dart官方文档。

本篇文章参考Dart官方文档 isolates