Dart Isolate入门
Dart多线程 Isolate 入门
什么是Isolate
Isolate就是Dart中的多线程,之所以不称为Thread,而是称为Isolate,是因为它与传统线程的概念有所区别,见如下表格
特性 | Isolate | Thread |
---|---|---|
内存共享 | 不共享内存 | 可以共享内存 |
通信方式 | ReceivePort和SendPort | 共享变量或synchronized关键字 |
数据竞争 | 无数据竞争 | 可能有数据竞争 |
开销 | 开销较大 | 相对轻量 |
任务调度 | Dart运行时管理,适合CPU密集型任务 | 由操作系统管理 |
Isolate的创建之所以比Thread开销要大,是因为Isolate在创建时需要创建更多的资源,例如事件循环队列、微任务队列,独立的内存堆以及独立的垃圾回收器,并且每个 Isolate 需要单独初始化 Dart 运行时环境,包括 Dart 代码执行上下文,而线程只需要共享进程的执行上下文。
使用场景:需要耗时计算时