我们都知道,javascript从诞生之日起就是一门单线程的非阻塞的脚本语言。这是由其最初的用途来决定的:与浏览器交互。

单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务。

而非阻塞则是当代码需要进行一项异步任务(无法立刻返回结果,需要花一定时间才能返回的任务,如I/O事件)的时候,主线程会挂起(pending)这个任务,然后在异步任务返回结果的时候再根据一定规则去执行相应的回调。

单线程是必要的,也是javascript这门语言的基石,原因之一在其最初也是最主要的执行环境——浏览器中,我们需要进行各种各样的dom操作。试想一下 如果javascript是多线程的,那么当两个线程同时对dom进行一项操作,例如一个向其添加事件,而另一个删除了这个dom,此时该如何处理呢?因此,为了保证不会 发生类似于这个例子中的情景,javascript选择只用一个主线程来执行代码,这样就保证了程序执行的一致性。

当然,现如今人们也意识到,单线程在保证了执行顺序的同时也限制了javascript的效率,因此开发出了web worker技术。这项技术号称让javascript成为一门多线程语言。

然而,使用web worker技术开的多线程有着诸多限制,例如:所有新线程都受主线程的完全控制,不能独立执行。这意味着这些“线程” 实际上应属于主线程的子线程。另外,这些子线程并没有执行I/O操作的权限,只能为主线程分担一些诸如计算等任务。所以严格来讲这些线程并没有完整的功能,也因此这项技术并非改变了javascript语言的单线程本质。

可以预见,未来的javascript也会一直是一门单线程的语言。

javascript是一门多线程的语言_如何理解JavaScript是一种单线程非阻塞脚本语言?...相关推荐

  1. python非阻塞多线程socket_Python实现web服务器之 单进程单线程非阻塞实现并发及其原理...

    在Python实现web服务器入门学习多进程.多线程实现并发HTTP服务器中,我们知道可以分别通过多进程.多线程的方式实现并发服务器,那么,是否可以通过单进程单线程的程序实现类似功能呢? 实际上,在P ...

  2. javascript是一门多线程的语言_Javascript:10天设计一门语言

    演进和使用的JavaScript是早在1995年开发的一种语言,真的是刚刚起步. 网景公司在1995年四月聘请Brendan Eich ,他被告知,他有10天时间创造并制作了一种将在Netscape的 ...

  3. 在主线程执行_深入理解JavaScript执行机制

    1.预备知识 JavaScript是一门单线程语言.单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务.如果前一个任务耗时很长,后一个任务就不得不一直等着. 所有任务可以分为两种,一 ...

  4. 网络安全与python语言_最适合网络安全的5种编程语言

    image 这里有5种编程语言,可以对网络安全的问题有所帮助. C和C++ 如果是在网络安全领域,C和C++是相对重要的最基础的编程语言,这些语言提供了对底层IT基础设施(如RAM和系统进程)的访问, ...

  5. 哲学家就餐问题c语言_哲学家就餐问题的一种Python解决方案

    哲学家就餐问题一直是多线程同步问题的经典案例,本文中展示了多线程竞争共享资源带来的死锁问题,并介绍了一种简单的解决方案. 哲学家就餐问题 哲学家最擅长的就是思考和吃饭 ,当他们感觉累的时候,就会拿起一 ...

  6. javascript 在对象中使用 定时器_如何使用JavaScript 面向对象编程

    学习目标 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 面向对象介绍 什么是对象 Everything is object (一切皆对象) 我们可以从两个层次来理解对象: ( ...

  7. java调用siri 语言_如何更改Siri的声音,口音,性别和语言

    java调用siri 语言 Most of us are familiar with Siri as an American female voice. What you may not realiz ...

  8. java多线程并行执行命令_深入理解Java多线程与并发框(第④篇)——重排序、屏障指令、as-if-serial规则...

    ![](http://img.blog.itpub.net/blog/2020/03/24/906435fda570a5e3.png?x-oss-process=style/bb) # 一.重排序 前 ...

  9. javascript 无法修改 数组中对象_如何使用JavaScript中的Date对象

    Date对象是一个内置函数,我们可以使用Date对象来显示日期,本篇文章就来给大家分享一篇有关于Date对象的使用方法. 内置函数我们可以使用new来创建 var 对象名称= new object() ...

  10. go语言源自python语言_别再用Python编写机器学习基础设施啦,Go语言它不香吗?...

    Go 是一种静态强类型.编译型.并发型且具有垃圾回收功能的编程语言,其优点包括部署简单.并发性好.语言设计良好.执行性能好等等.Python 是机器学习项目中最流行的语言,几乎在每个机器学习项目中都能 ...

最新文章

  1. pythonmax对字符_(MAX第五篇)Python--字符串操作(三)
  2. 解决样本类别不平衡以及困难样本问题的方法总结
  3. 对10个元素进行快速排序,在最好情况下,元素间的比较次数为( )次。
  4. C++笔记(2017/2/9)
  5. linux shell 中文件编码查看及转换方法
  6. MS 的IOC容器(ObjectBuilder)?
  7. cuda 10.1和 cudnn 7.6.5
  8. 【车间调度】基于matlab遗传算法求解多目标流水车间调度问题【含Matlab源码 443期】
  9. 酒店管理系统数据库设计说明书
  10. unity 罗技G29开发
  11. 无线传感器网络中的MAC协议
  12. 猫有哪些比较常见的肢体语言?
  13. 【SSM框架项目 客户关系管理系统CRM 学习开发 Day3】市场活动模块的数据导入与导出
  14. 一台计算机多个屏幕,一台电脑多个显示器,屏幕远程控制
  15. B - Distributing Ballot Boxes
  16. 高等数学费马定理的证明
  17. Delphi: RTTI与ini配置文件
  18. 用css给我画一朵花
  19. 如何搭建属于自己的腾讯云服务器
  20. 【单片机基础篇】rc延迟电路

热门文章

  1. python numpy 函数详解_numpy.linspace函数具体使用详解
  2. 修改mysql默认端口
  3. [转]使用Android-Studio 开发Android 程序
  4. 高校应该使用 Drupal 的10大理由
  5. 【LeetCode】217. Contains Duplicate (2 solutions)
  6. MYSQL 引擎的情况
  7. eclipse import的项目报autowired cannot be resolved to a type的错误
  8. [原创]Linux实现服务延迟启动
  9. 随机取 数据库中的 记录
  10. ORACLE常用数值函数、转换函数、字符串函数【转】