美文网首页
迷迷糊糊-js单线程

迷迷糊糊-js单线程

作者: magic_coder | 来源:发表于2017-05-30 12:14 被阅读0次

此文参考了阮一峰老师。

1.js的语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么js不能有多个线程呢?这样能提高效率啊。

js的单线程,与它的用途有关。作为浏览器脚本语言,js的主要用途是与用户互动,以及操作dom。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定js有同时有两个线程,一个线程在某个dom的节点上添加内容,另一个线程删除这个节点,这时的浏览器应该以哪个线程为准呢?

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

为了利用多核cpu的计算能力,html5提出web worker标准,允许js脚本创建多个线程,但是子线程完全受主线程控制,且不得操作dom,所以这个新标准并没有改变js单线程的本质。

2.任务队列

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

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

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

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

相关文章

  • 迷迷糊糊-js单线程

    此文参考了阮一峰老师。 1.js的语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么js不能...

  • Event Loop

    JS是单线程的 JavaScript语言最大特点就是单线程,但是这里的单线程指的是主线程是单线程的。那为什么js要...

  • 15-手写Node模块系统-Event Loop(事件环)

    JS是单线程的 JavaScript语言最大特点就是单线程,但是这里的单线程指的是主线程是单线程的。那为什么js要...

  • js 线程 之 异步编程(1)

    ----欢迎查看我的博客---- js 单线程   相信大家玩 js 很久了,Js语言的执行环境是 “ 单线程 ”...

  • JS执行机制

    首先我们来看几个问题: 1.JS是单线程的么?2.JS有异步么?3.JS单线程怎么实现的的异步 1.JS是单线程的...

  • js 运行机制

    Js 是单线程吗?怎么理解单线程? 解:Js是单线程,单线程就是指在一个时间内只能做一件事情。 Js的任务队列是怎...

  • js event-loop

    单线程 js是单线程是众所周知的事情,那么为什么js会被设计成单线程呢。因为如果js为多线程的话。如果一个线程在读...

  • javascript单线程,异步与执行机制

    js的单线程模型与游览器的进程/线程息息相关,在了解js单线程与异步的时候,建议先看看这篇文章 单线程/异步 js...

  • js单线程与异步编程

    1.js的单线程 从开始接触js我们就知道js是单线程的。单线程在程序执行时,所走的程序路径按照连续顺序排下来,前...

  • web前端面试题@十七(js的单线程和多线程)

    js单线程重点: JS 是单线程的,但是却能执行异步任务, 这主要是因为 JS 中存在事件循环(Event L...

网友评论

      本文标题:迷迷糊糊-js单线程

      本文链接:https://www.haomeiwen.com/subject/zecrfxtx.html