Dart tour: 16、隔离区(Isolates)
#
Isolates大多数计算机中,甚至在移动平台上,都在使用多核 CPU。为了有效利用多核性能,开发者一般使用共享内存的方式让线程并发地运行。然而,多线程共享数据通常会导致很多潜在的问题,并导致代码运行出错。
为了解决多线程带来的并发问题,Dart
使用 isolate
替代线程,所有的 Dart
代码均运行在一个 isolate
中。每一个 isolate
有独立的事件循环和内存以确保其状态不被其它 isolate
访问。
#
创建隔离区可以使用 Isolate.spawn()
或 Flutter
的 compute()
函数创建单独的隔离区来进行消耗性能的计算。
新创建的隔离区拥有自己的事件循环和内存,即使原始隔离区是该新隔离区的父级,也不允许其访问。
Isolate.spawn
必须传入一个有且仅有一个参数的函数,不可以不传。
#
主隔离区默认的隔离区是主隔离区。
#
隔离区通信在创建隔离区的时候,传入 ReceivePort
可以在外部接收隔离区回传的消息。
#
销毁隔离区这段代码在
VSCode
中有问题:Global evaluation requires a thread to have been loaded
。 可以通过命令行运行,这样就不会遇到这个问题。dart xxx.dart
。
通过 Isolate
对象的 kill
方法中断运行中的隔离区。