JS的单线程、同步、异步(上)

95 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、单线程:

java是一门多线程语言。

JavaScript是一门单线程的语言,因此,JavaScript在同一个时间只能做一件事,单线程意味着,如果在同个时间有多个任务的话,这些任务就需要进行排队,前一个任务执行完,才会执行下一个任务

image.png

image.png

2、为什么是单线程:

JavaScript的单线程,与它的用途是有很大关系。

我们都知道,JavaScript作为浏览器的脚本语言,主要用来实现与用户的交互,利用JavaScript,我们可以实现对DOM的各种各样的操作;

如果JavaScript是多线程的话,一个线程在一个DOM节点中增加内容,另一个线程要删除这个DOM节点;

那么这个DOM节点究竟是要增加内容还是删除呢?这会带来很复杂的同步问题。

因此,JavaScript是单线程的。

3、同步异步:

  • 同步任务

    指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务,当我们打开网站时, 网站的渲染过程,比如元素的渲染,其实就是一个同步任务

  • 异步任务

    指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务

image.png

image.png

有了异步,就算fun2()里面是文件的读取或ajax这种需要耗时的任务,也不怕fun3()要等到fun2()执行完才能执行啦,这个也是异步的好处和优点。