参考资料:
- juejin.cn/post/716121…
- book.flutterchina.club/chapter2/th…
- cloud.tencent.com/developer/n…
- juejin.cn/post/684490…
与Java和Object-C这些多线程的语言不同,Dart更类似JavaScript,是一种单线程的语言
Dart的运行原理是这样的:
每个Main方法对应开启一个Microtask队列和一个Event队列,这里又要说到Flutter的异步机制了。
与其他单线程异步的语言一样,Dart的多线程机制也是采用一种“伪多线程”的方法:
在没有操作或命令的时候,后台完成其他任务。
UI渲染完成后,视觉上我们的程序已经停止了,但是一些IO、网络请求的操作却在后台进行,给我们一种多线程的错觉。
机制大致如图:
这也是Event队列的主要用途。
至于Microtask队列,它更类似Kotlin中的携程,主要完成一些比较快速、基础的任务
其他的博客里面提到了Isolate,这是个啥呢?
Dart 为了利用多核 CPU,将 CPU 层面的密集型计算进行了隔离设计,提供了多线程机制,即 Isolate。每个 Isolate 资源隔离,都有自己的 Event Loop 和 Event Queue、Microtask Queue。Isolate 之间的资源共享通过消息机制通信(和进程一样)