Flutter与Dart的单线程模型

79 阅读1分钟

参考资料:

与Java和Object-C这些多线程的语言不同,Dart更类似JavaScript,是一种单线程的语言

Dart的运行原理是这样的:

image.png

每个Main方法对应开启一个Microtask队列和一个Event队列,这里又要说到Flutter的异步机制了。

与其他单线程异步的语言一样,Dart的多线程机制也是采用一种“伪多线程”的方法:

在没有操作或命令的时候,后台完成其他任务。

UI渲染完成后,视觉上我们的程序已经停止了,但是一些IO、网络请求的操作却在后台进行,给我们一种多线程的错觉。

机制大致如图:

image.png

这也是Event队列的主要用途。

至于Microtask队列,它更类似Kotlin中的携程,主要完成一些比较快速、基础的任务

其他的博客里面提到了Isolate,这是个啥呢?

Dart 为了利用多核 CPU,将 CPU 层面的密集型计算进行了隔离设计,提供了多线程机制,即 Isolate。每个 Isolate 资源隔离,都有自己的 Event Loop 和 Event Queue、Microtask Queue。Isolate 之间的资源共享通过消息机制通信(和进程一样)