15-消息队列和事件循环页面是怎么活起来的_for_vip_user_001.pdf

想预览更多内容,点击预览全文

申明敬告:

本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。如果您已付费下载过本站文档,您可以点击这里二次下载

文档介绍

15-消息队列和15-消息队列和循环:⻚⾯是怎么“活”起来的?循环:⻚⾯是怎么“活”起来的?前⾯我们讲到了每个渲染进程都有⼀个主线程,并且主线程⾮常繁忙,既要处理DOM,⼜要计算样式,还要处理布局,同时还需要处理JavaScript任务以及各种输⼊。要让这么多不同类型的任务在主线程中有条不紊地执⾏,这就需要⼀个系统来统筹调度这些任务,这个统筹调度系统就是我们今天要讲的消息队列和循环系统。在写这篇⽂章之前,我翻阅了⼤量的资料,却发现没有⼀篇⽂章能把消息循环系统给讲清楚的,所以我决定⽤⼀篇⽂章来专⻔⻚⾯的循环系统。循环⾮常底层且⾮常重要,学会它能让你理解⻚⾯到底是如何运⾏的,所以在本篇⽂章中,我们会将⻚⾯的循环给梳理清楚、讲透彻。为了能让你更加深刻地理解循环机制,我们就从最简单的场景来分析,然后带你⼀步步了解浏览器⻚⾯主线程是如何运作的。需要说明的是,⽂章中的代码我会采⽤C++来⽰范。如果你不熟悉C++,也没有关系,这⾥并没有涉及到任何复杂的知识点,只要你了解JavaScript或Python,你就会看懂。使⽤单线程处理安排好的任务使⽤单线程处理安排好的任务我们先从最简单的场景讲起,⽐如有如下⼀系列的任务:任务1:1+2任务2:20/5任务3:7*8任务4:打印出任务1、任务2、任务3的运算结果现在要在⼀个线程中去执⾏这些任务,通常我们会这样编写代码:voidMainThread(){intnum1=1+2;//任务1intnum2=20/5;//任务2intnum3=7*8;//任务3print(最终计算的值为:%d,%d,%d",num,num2,num3);//任务4}在上⾯的执⾏代码中,我们把所有任务代码按照顺序写进主线程⾥,等线程执⾏时,这些任务会按照顺序在线程中依次被执⾏;等所有任务执⾏完成之后,线程会⾃动。可以下图来直观地理解下其执⾏过程:第⼀版:线程

您可能关注的文档

最近下载