javascript是一门多线程的语言_如何理解JavaScript是一种单线程非阻塞脚本语言?...
我们都知道,javascript从诞生之日起就是一门单线程的非阻塞的脚本语言。这是由其最初的用途来决定的:与浏览器交互。
单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务。
而非阻塞则是当代码需要进行一项异步任务(无法立刻返回结果,需要花一定时间才能返回的任务,如I/O事件)的时候,主线程会挂起(pending)这个任务,然后在异步任务返回结果的时候再根据一定规则去执行相应的回调。
单线程是必要的,也是javascript这门语言的基石,原因之一在其最初也是最主要的执行环境——浏览器中,我们需要进行各种各样的dom操作。试想一下 如果javascript是多线程的,那么当两个线程同时对dom进行一项操作,例如一个向其添加事件,而另一个删除了这个dom,此时该如何处理呢?因此,为了保证不会 发生类似于这个例子中的情景,javascript选择只用一个主线程来执行代码,这样就保证了程序执行的一致性。
当然,现如今人们也意识到,单线程在保证了执行顺序的同时也限制了javascript的效率,因此开发出了web worker技术。这项技术号称让javascript成为一门多线程语言。
然而,使用web worker技术开的多线程有着诸多限制,例如:所有新线程都受主线程的完全控制,不能独立执行。这意味着这些“线程” 实际上应属于主线程的子线程。另外,这些子线程并没有执行I/O操作的权限,只能为主线程分担一些诸如计算等任务。所以严格来讲这些线程并没有完整的功能,也因此这项技术并非改变了javascript语言的单线程本质。
可以预见,未来的javascript也会一直是一门单线程的语言。
javascript是一门多线程的语言_如何理解JavaScript是一种单线程非阻塞脚本语言?...相关推荐
- python非阻塞多线程socket_Python实现web服务器之 单进程单线程非阻塞实现并发及其原理...
在Python实现web服务器入门学习多进程.多线程实现并发HTTP服务器中,我们知道可以分别通过多进程.多线程的方式实现并发服务器,那么,是否可以通过单进程单线程的程序实现类似功能呢? 实际上,在P ...
- javascript是一门多线程的语言_Javascript:10天设计一门语言
演进和使用的JavaScript是早在1995年开发的一种语言,真的是刚刚起步. 网景公司在1995年四月聘请Brendan Eich ,他被告知,他有10天时间创造并制作了一种将在Netscape的 ...
- 在主线程执行_深入理解JavaScript执行机制
1.预备知识 JavaScript是一门单线程语言.单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务.如果前一个任务耗时很长,后一个任务就不得不一直等着. 所有任务可以分为两种,一 ...
- 网络安全与python语言_最适合网络安全的5种编程语言
image 这里有5种编程语言,可以对网络安全的问题有所帮助. C和C++ 如果是在网络安全领域,C和C++是相对重要的最基础的编程语言,这些语言提供了对底层IT基础设施(如RAM和系统进程)的访问, ...
- 哲学家就餐问题c语言_哲学家就餐问题的一种Python解决方案
哲学家就餐问题一直是多线程同步问题的经典案例,本文中展示了多线程竞争共享资源带来的死锁问题,并介绍了一种简单的解决方案. 哲学家就餐问题 哲学家最擅长的就是思考和吃饭 ,当他们感觉累的时候,就会拿起一 ...
- javascript 在对象中使用 定时器_如何使用JavaScript 面向对象编程
学习目标 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 面向对象介绍 什么是对象 Everything is object (一切皆对象) 我们可以从两个层次来理解对象: ( ...
- java调用siri 语言_如何更改Siri的声音,口音,性别和语言
java调用siri 语言 Most of us are familiar with Siri as an American female voice. What you may not realiz ...
- java多线程并行执行命令_深入理解Java多线程与并发框(第④篇)——重排序、屏障指令、as-if-serial规则...
![](http://img.blog.itpub.net/blog/2020/03/24/906435fda570a5e3.png?x-oss-process=style/bb) # 一.重排序 前 ...
- javascript 无法修改 数组中对象_如何使用JavaScript中的Date对象
Date对象是一个内置函数,我们可以使用Date对象来显示日期,本篇文章就来给大家分享一篇有关于Date对象的使用方法. 内置函数我们可以使用new来创建 var 对象名称= new object() ...
- go语言源自python语言_别再用Python编写机器学习基础设施啦,Go语言它不香吗?...
Go 是一种静态强类型.编译型.并发型且具有垃圾回收功能的编程语言,其优点包括部署简单.并发性好.语言设计良好.执行性能好等等.Python 是机器学习项目中最流行的语言,几乎在每个机器学习项目中都能 ...
最新文章
- pythonmax对字符_(MAX第五篇)Python--字符串操作(三)
- 解决样本类别不平衡以及困难样本问题的方法总结
- 对10个元素进行快速排序,在最好情况下,元素间的比较次数为( )次。
- C++笔记(2017/2/9)
- linux shell 中文件编码查看及转换方法
- MS 的IOC容器(ObjectBuilder)?
- cuda 10.1和 cudnn 7.6.5
- 【车间调度】基于matlab遗传算法求解多目标流水车间调度问题【含Matlab源码 443期】
- 酒店管理系统数据库设计说明书
- unity 罗技G29开发
- 无线传感器网络中的MAC协议
- 猫有哪些比较常见的肢体语言?
- 【SSM框架项目 客户关系管理系统CRM 学习开发 Day3】市场活动模块的数据导入与导出
- 一台计算机多个屏幕,一台电脑多个显示器,屏幕远程控制
- B - Distributing Ballot Boxes
- 高等数学费马定理的证明
- Delphi: RTTI与ini配置文件
- 用css给我画一朵花
- 如何搭建属于自己的腾讯云服务器
- 【单片机基础篇】rc延迟电路
热门文章
- python numpy 函数详解_numpy.linspace函数具体使用详解
- 修改mysql默认端口
- [转]使用Android-Studio 开发Android 程序
- 高校应该使用 Drupal 的10大理由
- 【LeetCode】217. Contains Duplicate (2 solutions)
- MYSQL 引擎的情况
- eclipse import的项目报autowired cannot be resolved to a type的错误
- [原创]Linux实现服务延迟启动
- 随机取 数据库中的 记录
- ORACLE常用数值函数、转换函数、字符串函数【转】