基础知识 - flutter单线程模式

app大部分时间都在等待,比如等待触摸事件,网络请求,文件IO等等,这些等待行为并没有阻塞线程,
单线程模型可以在等待的过程中做其他的事情,等等到结果后再去处理事件,因为等待的过程是不受阻碍的,所以给人的感觉仿佛同时在做很多事情,但始终在一个线程执行

event loop事件循环,在app启动后,就会启动一个事件循环
事件队列和微任务队列(优先级别高:手势识别,文本输入,视图滚动)

app启动后,会开启一个事件循环,这个循环会一直轮询查询事件队列,先查找微任务队列,微任务队列中如果有任务需要执行,则以加入顺序依次执行(单线程模型)
如果微任务队列没有任务需要执行,则查询事件队列中是否有需要完成的任务,如果有则开始执行事件队列中的任务,如果没有,则结束当前事件循环,开启一个新的事件循环

Future->未来某个时间点执行 将函数体包含在Future中,则改函数则具备了异步的能力
Future具备链式能力,通过then执行后续链式代码,then和Future共享同一个事件循环,也就是执行完Future后,紧接着执行then里面的代码块,在执行后续的Future
通过Future可以将事件加入到事件队列中,加入后并不会立即执行,而是执行后续的同步代码,等到同步代码执行完毕后,事件循环开始执行事件队列中的异步代码,执行顺序按照加入的顺序依次执行

Isolate 让单线程模型具备多线程能力,通过Isolate创建的多线程之间不共享数据,所有就不存在线程安全的问题了,通过发送管道(SendPort)来实现消息机制

通过compute可以快速开启一个isolate线程

posted @ 2022-08-09 14:48  qqcc1388  阅读(7)  评论(0)    收藏  举报