js的运行机制,事件循环和任务队列,浏览器的多线程,进程与线程

简述:

浏览器是多线程的,浏览器至少提供5个线程去辅助一个页面程序的运行,有的浏览器还是多进程的,例如Chrome浏览器(启动时有多个进程,每打开一个页面,就增加了一个进程)
js是单线程的,即js运行在浏览器中,始终在一个线程上执行,js为了提高执行效率,使用异步,异步就是两个或者两个以上的线程共同完成的,(浏览器提供的)
在这里插入图片描述

浏览器的6个线程:

1.UI线程(渲染页面,js可以操作DOM,影响渲染,所以js引擎线程和UI线程是互斥的,js执行时会阻塞页面的渲染)
2.js引擎线程(js主线程,执行js代码,用户输入,网络请求)
3.定时器触发线程(setTimeout, setInterval)
4.浏览器事件触发监听线程(控制交互,响应用户)
5.HTTP请求线程(ajax请求的使用)
6.Event Loop轮询处理线程(轮询任务队列)
 <script>
        for(var i=0;i<10;i++){
            setTimeout(function(){
                console.log(i);
            },0);
           
        }
        console.log("这是for循环语句之后的");
  </script>

在这里插入图片描述

1.点击事件,HTTP请求,setTimeout都将放入任务队列中,等待js主线程任务空了,再执行。
2.js代码由js主线程控制,任务队列由Event Loop线程控制
3.在执行for循环时,每执行一次,就把setTimeout放入任务队列中,(所以执行完for循环,才会执行任务队列中的setTimeout此时i都为10)
4.由Event Loop线程控制的任务队列采用轮询机制。

Event Loop(事件循环)和任务队列:

1.同步函数被调用时,只有前一个任务,执行完毕,才能执行后一个任务。比如fucntion函数(普通函数)
2.异步函数被调用时,先不进入主线程,而进入任务队列,只有任务通知主线程,某个任务可以执行,该任务才能进入主线程执行,比如jQuery中的ajax函数
3.主线程中,同步任务(同步函数)组成执行栈
4.主线程完成执行栈中的同步任务后,就会读取任务队列,放入主线程中执行。
5.只要主线程空了,就会去读取"任务队列"

在这里插入图片描述

任务队列 ,也叫事件队列或消息队列
同步和异步通常是用来形容一个函数被调用时发生的行为
主线程中的任务结束之后,取出任务队列的第一个任务,推入执行栈中,重复此步骤这就叫做事件循环

进程与线程:

进程和线程的根本区别是:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
运行以后的程序叫做“进程”,一个进程一次只能执行一个任务(一般情况下)

		如果很多任务需要执行:
		1.排队。因为一个进程一次只能执行一个任务,只能等前面的任务执行完,再执行后面的任务
		2.新建进程:使用fork命令,为每一个任务新建进程
		3.新建进程让线程去完成任务
  1. 线程自己基本不拥有系统资源,只拥有少量必不可少的资源:程序计数器、一组寄存器、栈。同属一个进程的线程共享进程所拥有的主存空间和资源
  2. 一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。
  3. 线程具有进程的许多特征,故又称轻型进程,传统进程称重型进程
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值