首页 > 其他分享 >为什么js引擎是单线程?

为什么js引擎是单线程?

时间:2023-06-25 09:55:59浏览次数:51  
标签:处理机 单线程 js 引擎 线程 进程 执行

为什么js引擎是单线程?

js的主要用途是与用户互动,以及操作DOM,这决定它只能是单线程。例:一个线程要添加DOM节点,一个线程要删减DOM节点,容易造成分歧。

为了更好使用多CPU,H5提供了web Worker 标准,允许js创建多线程,但是子线程受到主线程控制,而且不得操作DOM。

说说进程与线程的区别与联系

这问题,估计计算机专业的同学在找研发等工作的时候都会遇到过。前几天某老牌软件厂商的电话面试就提到了这一经典问题,今天招聘会上又有不少同学说在面试的时候被问到这点。在这里我就起个头,大家有啥想法意见等都欢迎回帖交流。

要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。

进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。

线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。

说到这里,我们对进程与线程都有了一个大体上的印象,现在开始说说二者大致的区别。

进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。这是进程宏观上的执行过程。而进程又可有单线程进程与多线程进程两种。我们知道,进程有 一个进程控制块 PCB ,相关程序段 和 该程序段对其进行操作的数据结构集 这三部分,单线程进程的执行过程在宏观上是线性的,微观上也只有单一的执行过程;而多线程进程在宏观上的执行过程同样为线性的,但微观上却可以有多个执行操作(线程),如不同代码片段以及相关的数据结构集。线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。出了 CPU 之外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。与进程控制表和 PCB 相似,每个线程也有自己的线程控制表 TCB ,而这个 TCB 中所保存的线程状态信息则要比 PCB 表少得多,这些信息主要是相关指针用堆栈(系统栈和用户栈),寄存器中的状态数据。进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。

线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。


  1. 线程的执行特性。

线程只有 3 个基本状态:就绪,执行,阻塞。

线程存在 5 种基本操作来切换线程的状态:派生,阻塞,激活,调度,结束。

  1. 进程通信。

单机系统中进程通信有 4 种形式:主从式,会话式,消息或邮箱机制,共享存储区方式。

主从式典型例子:终端控制进程和终端进程。

会话式典型例子:用户进程与磁盘管理进程之间的通信。

标签:处理机,单线程,js,引擎,线程,进程,执行
From: https://www.cnblogs.com/kitebear/p/17502182.html

相关文章

  • Three.js教程:WebGL渲染器设置(锯齿模糊)
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生WebGL渲染器设置(锯齿模糊)一般实际开发,threejs的WebGL渲染器需要进行一些通用的基础配置,本节课给大家简单介绍下,比如渲染模糊或锯齿问题。渲染器锯齿属性.antialias设置渲染器锯齿属性.antialias的值可以......
  • 【js学习笔记四】数组双重去重的方式三filter
     目录前言导语运行结果总结前言   我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语   数组......
  • 【js学习笔记五】数组双重去重的方式四先排序在对比
     目录前言导语 代码部分运行结果总结前言   我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语......
  • Nodejs介绍与安装
    Nodejs介绍与安装介绍Nodejs是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境Nodejs采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模Nodejs大部分基本模块都用JavaScript编写。......
  • Python json和pickle模块
    json和pickle模块用于序列化的两个模块序列化模块:json和picklejson,用于字符串和python数据类型间进行转换pickle,用于python特有的类型和python的数据类型间进行转换Json模块提供了四个功能:dumps、dump、loads、loadpickle模块提供了四个功能:dumps、dump、loads、......
  • Mysql-存储引擎
    存储引擎1.存储引擎概述和大多数的数据库不同,MySQL中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎。存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。Oracle,SqlServer......
  • Three.js教程:阵列立方体和相机适配体验
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生阵列立方体和相机适配体验本节课通过阵列一片立方体,进一步体验下透视投影相机的投影规律。for循环创建一列模型constgeometry=newTHREE.BoxGeometry(100,100,100);//材质对象Materialconstmateria......
  • js:codemirror实现在线代码编辑器代码高亮显示
    CodeMirrorisaversatiletexteditorimplementedinJavaScriptforthebrowser.Itisspecializedforeditingcode,andcomeswithanumberoflanguagemodesandaddonsthatimplementmoreadvancededitingfunctionality.译文:CodeMirror是一个多功能的文本编辑......
  • 基于 JSON 的 DSL 查询 - 实现步骤【ElasticSearch】
    ESDSL查询实现//todo2.准备Request-搜索哪个索引库SearchRequestsearchRequest=newSearchRequest("hotel");//todo4.所有的搜索条件封装对象searchSourceBuilderSearchSourceBuildersearchSourceBuilder=newSearchSourceBuild......
  • js 获取当前时间
    getNow(){letdate=newDate();lety=date.getFullYear();letm=date.getMonth()+1;letd=date.getDate();letH=date.getHours();letmm=......