2021-06-09js是一个单线程与事件循环的编程语言

js语言特点

js是一个单线程,事件队列循环(event loop)的编程语言

那什么是线程呢?
进程:进行中的程序就是进程。

在计算机中,运行一个软件的流程是,安装下载的软件包.exe文件,将软件安装到硬盘的某个分区中,安装完成后会自动生成一个桌面快捷方式。双击快捷方式打开软件,这时计算机的CPU(中央处理器)会去根据快捷方式的路径去读取硬盘里软件的数据,将读取到的数据交给CPU(包含运算器和缓冲器)的运算器部分,运算器对读取到的数据进行各种复杂计算,最终将数据转换为二进制数据。再通过cpu的缓冲器,将运算完的结果数据交给了计算机的内存,因此我们一般说硬盘是永久存储软件的基本数据,而内存存储的是软件在运行时(runtime)的数据,那么这时软件运行起来后,操作系统会给每个运行起来的软件一个唯一的标识ID值,我们把这种运行起来的程序叫做进程。

进程其实就是操作系统的一个基本单元。

线程:从概念上看,就是一种线性程序。在进程运行期间,每次操作进程里的某个功能时,进程需要通过线程来告诉CPU要运行的功能是什么功能,CPU才根据这次告知的信息来做反馈,将结果通过线程返回给进程,那么进程就完成本次功能的结果

那么如果当前任务的线程被CPU霸占使用的话,那么再点击其它进程里的功能时,会产生新的线程来发送命令给CPU,CPU再运算,将结果反馈这就是所谓的**多线程操作*

js特点,同一个时间只能做一件事

主线程:多个同步任务按顺序执行的这个队形就是主线程,又叫执行栈。

任务队列:前一个任务结束,才会执行后一个任务

任务队列中的任务又分为:同步任务、异步任务

同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务

异步任务:不进入主线程,而进去任务队列

事件循环:主线程从“任务队列”中读取事件,这个过程是循环不断地,所以整个的这种运行机制又称为事件循环(event loop)

javascript的运行机制

1,所有同步任务在主线程执行,这就是执行栈,

2,异步任务挂在主线程之外的任务队列(事件队列)里,

3,主线程执行完毕,就会读取任务队列,执行任务,

主线程会不断执行上述1,2,3步

浏览器也是一个软件,在运行起来后,对js的处理只有一根线程在干活,所以js是一个单线程的编程语言。那么问题来了,一旦js代码在处理到某个地方发生阻塞时,比如说碰到定时器,那么这时就可能导致剩余的其它代码无法继续执行,结果就是会产生页面在长期等待中。

那么为了避开上边产生的影响,提高js的一个运行效率,因此对于某些阻塞主线程运行的代码,全部将他们拿出来放到一个“事件队列”里去处理,这个事件队列里的程序会等待主线程里的代码全部运行完后才去事件队列里排队等待执行的代码依次那么出来执行。事件队列是一种数据结构,并且是一种先进先出的数据结构,在js中将影响主线程执行的代码拿出来放进这个队列中后,因为代码从上往下的道理,那么先运行到阻塞主线程运行的代码时,就把这个先拿出来入队,最后主线程运行完后,在事件队列中的代码,谁先进,谁就先运行,先出来。

总结:主线程直接运行的代码我们称之为“同步代码”,阻塞主线程运行的代码称之为“异步代码”,目前常见的异步代码有定时器代码和ajax代码。所以说js是一个单线程(single thread),事件队列循环(event loop)的编程语言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值