我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript单线程的概念是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript单线程的概念是什么

这篇文章主要介绍“JavaScript单线程的概念是什么”,在日常操作中,相信很多人在JavaScript单线程的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript单线程的概念是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在JavaScript中,因为主要用途是与用户互动以及操作DOM,同一时间只能做一件事情,这决定了它只能是单线程,否则会带来很复杂的同步问题,为了避免复杂性,JavaScript从诞生就是单线程。

本教程操作环境:windows10系统、javascript1.8.5版、Dell G3电脑。

JavaScript为什么是单线程

JavaScript语言的一大特点就是单线程,即同一时间只能做一件事情。

JavaScript的单线程,与它的用途有关。

作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。

这决定了它只能是单线程,否则会带来很复杂的同步问题。为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JS脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新标准并没有改变JS单线程的本质。

比如,假定JavaScript同时有两个线程,

一个线程在某个DOM节点上添加内容,

另一个线程删除了这个节点,

这时浏览器应该以哪个线程为准?

所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。

任务队列

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。

如果排队是因为计算量大,CPU忙不过来,倒也算了,但是很多时候CPU是闲着的,因为IO设备(输入输出设备)很慢(比如Ajax操作从网络读取数据),不得不等着结果出来,再往下执行。

JavaScript语言的设计者意识到,这时主线程完全可以不管IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续执行下去。

于是,所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入”任务队列”(task queue)的任务,只有”任务队列”通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

具体来说,异步执行的运行机制如下。(同步执行也是如此,因为它可以被视为没有异步任务的异步执行。)

(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。

(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。

(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。

(4)主线程不断重复上面的第三步。

下图就是主线程和任务队列的示意图。

JavaScript单线程的概念是什么

到此,关于“JavaScript单线程的概念是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript单线程的概念是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python进程和线程的概念是什么

这篇文章主要介绍“Python进程和线程的概念是什么”,在日常操作中,相信很多人在Python进程和线程的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python进程和线程的概念是什么”的疑惑有所
2023-06-02

Java多线程基础概念是什么

本篇内容主要讲解“Java多线程基础概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程基础概念是什么”吧!并发与并行并行,表示两个线程同时做事情。并发,表示一会做这个事情,一
2023-06-17

Linux的进程线程及调度的概念是什么

这篇“Linux的进程线程及调度的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux的进程线程及调度的概念是
2023-06-28

双线服务器的概念是什么

双线服务器是指具有两条独立的网络连接的服务器。这种服务器可以同时连接两个不同的网络,通常是为了提高网络连接的稳定性和可靠性。当一条网络连接出现问题时,另一条网络连接可以继续保持服务器的运行,确保网络服务的持续性。双线服务器通常被用于需要高可
双线服务器的概念是什么
2024-04-23

多线服务器的概念是什么

多线服务器是指一台服务器同时处理多个请求或连接的能力。这种服务器可以同时处理来自多个客户端的请求,提高了服务器的并发处理能力和性能。多线服务器通常会使用多线程或多进程的方式来处理并发请求,从而提高服务器的响应速度和吞吐量。通过有效地管理和分
多线服务器的概念是什么
2024-04-23

swoole协程的概念是什么

本篇内容介绍了“swoole协程的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!swoole协程是更加轻量级的线程,一个线程可以拥
2023-06-29

C#单元测试概念是什么

本篇内容主要讲解“C#单元测试概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#单元测试概念是什么”吧!C#单元测试应用的环境:通常而言,一个单元测试是用于判断某个特定条件(或者场景)
2023-06-17

C#的概念是什么

本文小编为大家详细介绍“C#的概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#的概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。C#简介 C#(读作“C Sharp”)是一种容
2023-06-27

编程热搜

目录