eventLoop

理解事件循环:
javeScript是单线程语言,js要在宿主环境下执行,浏览器内部有v8 nodejs 有libuv 浏览器里面有各种异步的事件,各种任务,所以需要在任务队列中排队,浏览器的主线程丛任务队列中取出任务依次执行
最新理解
1.浏览器主线程是一个无限循环
2.每次循环会一个一个执行消息队列中的任务,
3.其他所有线程(包括其他进程的线程)可以随时像消息队列中追加任务
整个过程称之为事件循环 消息循环 具体细节为
怎么理解js异步
js是单线程语言是因为它运行在浏览器的渲染主线程,渲染主线程只有一个
渲染线程里面有很多工作 渲染界面 、执行js
如果采用同步的方式会导致主线程产生阻塞,导致消息队列中的任务无法执行
浏览器采用异步的方式,比如遇到计时器、网络、事件监听、主线程会把这些任务交给其他线程去处理,接着执行后面的代码,当有线程完成任务时,会把事先传递的回调函数包装成任务加入到消息队列的末尾,等待主线程执行,这种机制使浏览器永不阻塞
例子:遇到渲染,会把渲染任务放到消息队列,接着执行后续代码,遇到循环同步任务,会等待执行完,把消息队列中的任务放到主线程执行,所以产生了延迟渲染
任务没有优先级,但是消息队列有,至少包含的队列 延迟队列(中)、交互队列(高)、微队列(最高)

浙公网安备 33010602011771号