00:03
那么事件循环。每个S都有一个自己的事件循环。Dota中的事件循环包含两个队列,微任务队列和事践队列。事件队列是data处理此isol外部事件的唯一途径,例如IO操作流。用户的单击网络请求的回调,来自其他类的消息会有用户交互触发了任何操作,这些被称为事件,并且会被添加到事件队内。事件循环将根据队内顺序处理事件。唯一任务是使用顶层函数micro taskco函数时传入的函数所包含的任务。该函数通常执行耗时的工作,常用于异步任务,并且该微任务将被添加到微任务队列。函数会异步执行一个函数。
01:04
也就是传递给他的那个函数。通过此函数注册的回调始终按顺序执行,并保证在其他业务事件。之前运行唯一任务队列,不处理外部事件。启动应用程序时,将创建并启动一个新线程。创建主线程后,Data会将微任务和事件对内初始外为空,同时执行漫延方法。执行过程中将微任务放入微任务对内,事件放入事件对内,一直到执行完漫延方法中的最后一条代码,然后启动事件循环。值得注意的是。微任务队列的执行优先级呢?高于事件队列,只有当微任务队列的中的任务全部执行完成,并且微任务队列为空,那么事件循环才开始处理事件队列中的事件。
02:04
执行流程图了,我们看一下。Det是单线程事件循环,通过并发访问线程来允许并行任务执行。线程负责执行代码,一旦代码进入该线程了,它的执行顺序就是线性的,并且直到所有代码执行完毕后才会停止。事件循环控制线程将按顺序执行的内容。它不会更改或执行大代码,仅仅用来控制其执行事件循环会将事件队列和任务队列中的。和微任务队列中的条目放入现成的调用对栈中。由于外部事件。可以不断扩充事件队列,进而使得duer中的异步和响应成为可能。
03:01
为了更加直观的理解事件的循环控制代码执行的顺序呢?我们来看一个事例。创一个新文件。那一个慢音函数呢,要创建一个么?标准的。那么呢?
04:34
然后中间呢,我们通过micro task添加一个微任务。这里呢为他传入一个回调函数,这里我们我们采用匿名函数。比如我们打印微唯一这个编号。
05:19
然后呢,然后呢,我们是由future对象添加一个。发起一个时间。然后我们使用future对象呢发起一个时间。它的持续时间呢,那么它的。间隔时间呢,他的延迟时间呢,那一秒seconds秒。
06:06
然后第二个参数呢,是一个函数,我们仍然为了产生一个匿名函数。
07:03
那我们再次通过非对象呢,发起一个时间。这是异步异步事件。这里为了传递一个函数,匿名函数。然后我们呢,我们再添加一个V任务,传为一不函,传入一个入一个厘米函数。还是体能。我们打印。
08:04
然后我们执行一下,观察一下它的执行顺序。那么首先直引行蔓延方法,从蔓延方法开始,一直到蔓延方法结束,在这过程中呢?有微任务,添加到微任务队列事件。添加到实践队内。然后呢,先从main第一行代码开始执行到。最后一行代码结束,然后呢,执行微任务对垒,就这两个,然后再执行事件对垒,这三个我们看一下,首先慢法开始,慢方结束,因为中间没有其他操作,只有微任务和事件。
09:10
那么先执行微任务啊,我们观察一下他们的顺序,先执行的微任务,然后再执行的事件,因为这三个是异步事件,异步事件呢,执行的顺序啊,不一定会按照你定义的顺序开始,他们是随机的。
我来说两句