-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【JS】JS的运行机制 #104
Comments
参考:http://kmanong.top/kmn/qxw/form/article?id=69913&cate=51 进程与线程进程是CPU资源分配的最小单位。 一个可以独立运行且拥有自己的资源空间的任务程序。进程包括运行中的程序和程序所使用到的内存和系统资源。CPU在运行一个进程时,其他的进程处于非运行状态,CPU使用 线程是CPU调度的最小单位。 线程是建立在进程的基础上的一次程序运行单位,通俗点解释线程就是程序中的一个执行流,一个进程可以有多个线程。 一个进程中只有一个执行流称作单线程,即程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。 进程之间相互独立,但同一进程下的各个线程间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号) 浏览器浏览器是多进程的拿Chrome来说,我们每打开一个Tab页就会产生一个进程,我们使用Chrome打开很多标签页不关,电脑会越来越卡,不说其他,首先就很耗CPU。 Chrome为什么要使用多进程架构? 如果浏览器中的一个tab网页崩溃的话,将会导致其他被打开的网页应用崩溃。进程之间是不共享资源和地址空间的,提高了安全性。 浏览器包含哪些进程
渲染进程
|
首先,整体的script(作为第一个宏任务)开始执行的时候,会把所有代码分为同步任务、异步任务两部分 同步任务会直接进入主线程依次执行 异步任务会再分为宏任务和微任务 宏任务进入到Event Table中,并在里面注册回调函数,每当指定的事件完成时,Event Table会将这个函数移到Event Queue中 微任务也会进入到另一个Event Table中,并在里面注册回调函数,每当指定的事件完成时,Event Table会将这个函数移到Event Queue中 当主线程内的任务执行完毕,主线程为空时,会检查微任务的Event Queue,如果有任务,就全部执行,如果没有就执行下一个宏任务 上述过程会不断重复,这就是Event Loop,比较完整的事件循环 |
JS为什么设计成单线程
JS是单线程与它的用途有关,作为浏览器脚本,JS主要用途是与用户互动,以及操作DOM,这决定了JS只能是单线程的。假定JS同时有两个线程,一个改变某个DOM节点的内容,另一个删除这个DOM节点,则会发生冲突和错误。
为了利用多核CPU的计算能力,HTML5提出了
web worker
标准,允许JS创建多个线程,但子线程完全受主线程控制,且不得操作DOM。所以也没有改变JS单线程的本质。JS为什么有Event Loop
通过将异步任务放入队列中,可以先执行同步任务,防止一直处于等待状态。影响用户体验。
The text was updated successfully, but these errors were encountered: