javaScript Core -- 运行机制:单线程&&任务队列

Frida源码解析:JavaScript在Native进程中的运行机制与跨语言交互设计 动态插桩是现代软件分析、安全测试和逆向工程中的关键技术,它允许在程序运行时注入并执行自定义代码,实现对目标进程行为的监控与修改。其核心原理在于通过进程注入、API Hook和内存操作等技术,在非JavaScript环境中安全地引入并管理一个脚本运行时。这项技术的价值在于为安全研究人员和开发者提供了强大的动态分析能力,广泛应用于移动应用安全评估、漏洞挖掘、协议分析和自动化测试等场景。以Frida为例,它通过精巧的架构设计,在目标进程内构建了一座连接Native代码与JavaScript的桥梁,其JavaScr 阅读详情

JavaScript 运行机制


1.单线程
      
    多线程操作可以实现应用的并行处理,从而以更高的CPU利用率提高整个应用程序的性能和吞吐量。现在很多语言都支持多核并行处理技术,然而JavaScript却以单线程执行,为什么呢?
    其实这要追溯到JavaScript的的诞生伊始。作为一门浏览器端脚本语言,JavaScript从被创造出的那一刻开始,就主要用于与用户互动,以及操作DOM,进行客户端校验,业务场景十分清晰简单。若以多线程的方式操作这些DOM,则可能出现操作冲突。假设有两个线程同时操作一个DOM元素,线程1要求浏览器删除DOM,而线程2却要求修改DOM样式,这时浏览器就无法决定采用哪个线程的操作。当然,我们可以为浏览器引入“锁”的机制来解决这个冲突,但这会大大提高javascript语言本身的复杂性。加上其他的一些原因,JavaScript 从诞生开始就选择了单线程这条道路。

     单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。但是如果不是由于CPU处于忙碌状态而导致的排队,仅仅是由于IO设备导致的排队(此时CPU处于空闲状态呢,但是IO设备占用主线程),JS则必须等待IO的结果才能继续进行,这段时间CPU的空闲状态是浪费掉了。但是完全可以在这时主线程不管IO设备,挂起处于等待状态的任务,先运行处于后面的任务,这些耗时的任务完成后则以回调的方式执行相应处理,等IO操作结束了,再回过头,把挂起的任务继续执行。异步与回调的思想贯彻了整个JavaScript的生命周期。

2.异步执行机制
    一个 JavaScript 运行时包含了一个任务队列,该队列是由一系列待处理的任务组成,且每个任务都有相对应的回调函数。IO设备完成一项任务,就在"任务队列"中添加一个事件,表示相关的异步任务可以进入"执行栈"了。
    javascript的主线程是一个类似于栈的数据结构,存放着正在执行的程序。当栈为空时,就会从任务队列中取出一个任务并处理之。该次处理会调用与该任务相关联的一系列函数。当该任务处理完毕后,栈就会再次为空,如此循环,具体如下:
  • 所有同步任务都在主线程上执行,形成一个执行栈。
  • 主线程之外,还存在一个"任务队列"。只要异步任务(I/O,网路请求等耗时操作)有了运行结果,就在"任务队列"之中放置一个事件。
  • 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列"里第一个待处理任务,执行对应的回调函数,结束等待状态,进入执行栈,开始执行。

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

   注意在第三步中:一般情况下排在前面的事件优先自动被读取,只要执行栈一清空,"任务队列"上第一位的事件就自动进入主线程。但是,由于存在后文提到的"定时器"功能,主线程首先要检查一下执行时间,某些事件只有到了规定的时间,才能返回主线程。
    注:所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

 
举个例子来为上面的结论做佐证
<span style="font-size:18px;">setTimeout(function() { console.log(1); } , 1000);
console.log('a')
setTimeout(function() { console.log(2); } , 800);
console.log('b')
setTimeout(function() { console.log(3); } , 600);</span>

输出
a
b
3
2
1



4×V100部署Qwen3.8-Flash-Next:vLLM/GGUF实战 大模型本地部署的核心,是把参数量、量化精度、显存容量和推理框架放在同一张账本里算清楚。MoE 模型总参数量大但激活参数少,解码阶段更受显存带宽与 KV Cache 限制;通过 INT4/AWQ 或 GGUF 等 4-bit 量化可显著压缩权重占用,再结合 vLLM 张量并行、llama.cpp 分层切分提升多卡利用率。其技术价值在于让 V100 这类老架构 GPU 也能承载百亿级参数模型的私有化推理,并服务于 RAG 知识库、工作流 API、批量生成等场景。这次围绕 4×V100 32G 部署 Qwen3. 阅读详情

相关推荐

Ubuntu20.04安装Torque-6.1.2单机版(踩坑篇)

说明:PBS排队系统原先是在Centos7安装使用很顺利,但是有客户需求在Ubuntu20.04上使用,着手在Ubuntu20.04安装上安装的时候发现很多报错,并不能顺利安装,网上查找到的教程,有的说是让放弃转slurm,有的是换源安装,但是安装好的版本很低,有许多bug,不是很好用。经过自己慢慢摸索之后,改了部分配置以及源码之后,能够顺利安装,再次记录一下踩坑心得,与大家一起分享学习。如有问题,欢迎大家来撩。...............

华青水上的博客 8087

JSCore的基本使用

http://www.cocoachina.com/ios/20161117/18117.html 一、简单介绍 JSCore全称为JavaScriptCore,是苹果公司在iOS中加入的一个新的framework。该framework为OC与JS代码相互操作的提供了极大的便利。该工程默认是没有导入工程中的,需要我们手动添加。 添加完成后,我们可以看到Java

一头雾水的Blog 2349

(SCADA)监控与数据采集系统

SCADA应用于监控和采集数据来控制工业过程软件。它通过收集和传输实时数据,帮助操作员监视和控制各种设备和过程。

软件技术的专栏 4542

JavaScript Core -- 函数详解(作用域&&参数值传递&&this关键字&&函数声明)

javascript中函数的各类概念 (作用域&&参数值传递&&this关键字&&函数声明)

hellobeifeng的专栏 1403

2025年情感分析(SA)综述——论文阅读报告

2025年情感分析(SA)综述——论文阅读报告

Samdy_L的博客 2086

Spark Sql 连接mysql

转载请务必注明原创地址为:http://dongkelun.com/2018/03/21/sparkMysql/ 1、基本概念和用法(摘自spark官方文档中文版) Spark SQL 还有一个能够使用 JDBC 从其他数据库读取数据的数据源。当使用 JDBC 访问其它数据库时,应该首选 JdbcRDD。这是因为结果是以数据框(DataFrame)返回的,且这样 Spark SQL操作轻松或便......

主要分享大数据相关的知识,如Spark、Hudi 1万+

[WebKit] JavaScriptCore解析--基础篇(四) 页面解析与JavaScript元素的执行

很多地方都已经介绍了JavaScript在浏览器是如何被执行的,这里介绍一下WebKit是如何实现的。主要涉及JS的async,defer及普通脚本的解析与执行过程的代码实现。 1. 概要说明 先概要说明一下浏览器如何执行JavaScript的。 首先浏览器的页面解析器(Document Parser)遇到就会发起下载(脚本内容在页面内的就不用下载了)。然后针对不同情况执行的方式有所不

求索 1万+

10步掌握!跨国企业在MySQL中实现数据主权的秘诀 vs. 传统方法,你选对了吗?

首先,我们要明确“数据主权”这一概念。简单来说,它指的是国家对其境内产生的所有类型的数据拥有绝对控制权。这意味着即使数据被存储在国外服务器上,只要该数据来源于某国,那么该国政府就有权对其进行监管。对于跨国公司来说,这就要求它们必须严格遵循不同国家关于数据保护的规定,如欧盟的GDPR、美国的《云法案》以及中国的《网络安全法》等。

java专栏 714

深入理解core-js项目:如何贡献高质量的JavaScript标准库补丁

core-js作为现代JavaScript开发中不可或缺的垫片(Polyfill)库,为开发者提供了全面的ECMAScript标准兼容性解决方案。本文将从技术实现角度,深入剖析如何为core-js项目贡献代码,特别是如何添加新的polyfill实现。 ## 一、polyfill开发基础规范 ### 1.1 代码兼容性要求 所有polyfill实现必须满足ES3语法环境要求,这意味着: - 不能...

gitblog_00199的博客 518

CODESYS无扰切换PID(ST源代码)

/运行信号//手自动切换//设置值、目标值yk : REAL;// 实际值、反馈信号;// 开环给定值;// 比例增益;// 积分时间 单位S;Td : REAL;// 微分时间 单位S;//采样时间 单位S// 滤波时间 单位S;//中断周期 默认10msEND_VARVAR_OUTPUT//uk : REAL;//控制器输出;//上一时刻的实际值;uDk : REAL;

RXXW_Dor的博客 1400

行为预测模型:Social LSTM与Graph Neural Networks

行为预测模型:Social LSTM与Graph Neural Networks ,人工智能,计算机视觉,大模型,AI,本文围绕行为预测模型Social LSTM与Graph Neural Networks展开,介绍了两者的基础概念、原理、应用场景,还对比了它们在优势、劣势和适用场景上的不同,最后给出了相应的代码示例。Social LSTM基于LSTM,通过社交池化层处理多智能体交互;图神经网络处理图结构数据,靠消息传递获取信息,二者各有侧重,适用于不同场景。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

Kobo阅读器终极自定义指南:如何用NickelMenu打造你的专属操作菜单

想象一下,你的Kobo电子书阅读器拥有一个完全自定义的快捷菜单,一键启动你最爱的阅读软件、快速切换屏幕模式、甚至运行复杂的系统脚本——这一切都可以通过**NickelMenu**轻松实现。这款专为Kobo设备设计的开源工具,能让你彻底解锁设备的隐藏潜力,让操作效率飙升300%! ## 🔧 为什么你的Kobo需要NickelMenu? 你是否曾为Kobo系统繁琐的操作而烦恼?想要快速切换暗黑模

gitblog_00877的博客 553

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 1万+

深入解析 core-js:现代 JavaScript 的兼容性基石

深入解析 core-js:现代 JavaScript 的兼容性基石

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 2651

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

彻底搞懂core-js:Promise polyfill如何拯救老旧浏览器的异步操作

你是否还在为IE浏览器不支持Promise而头疼?是否好奇那些现代JavaScript特性是如何在古老环境中工作的?本文将带你深入core-js的内部机制,揭秘Promise polyfill的实现原理,让你读完就能: - 理解Promise的状态管理逻辑 - 掌握异步回调的调度机制 - 学会如何调试polyfill相关问题 - 了解core-js的模块化设计思想 ## 为什么需要Promise...

gitblog_00249的博客 756

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JS中的事件循环宏任务(MacroTask)和微任务(MicroTask)

js是单线程语言,问题:大家熟知单线程在运行的时候代码都是从上往下执行,那么会有代码堵塞的问题,应该如何解决? JS在执行的时候会有同步任务和异步任务 同步任务 顺序执行,类似下面代码 console.log("start"); console.log("end"); // 打印结果 start end 异步任务 就是会把任务放进一个任务队列中,等同步任务执行完再来执行 异步任务有:settimeout, setInterval,ajax ,promise.then(.

CSND7997的博客 444

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

突破浏览器限制:core-js助力Service Worker实现完美离线体验

你是否曾遇到过这样的情况:用户在弱网环境下打开你的网页,却因为浏览器不支持某些新特性而导致离线功能失效?或者辛辛苦苦开发的Service Worker缓存策略,在老旧设备上根本无法运行?作为前端开发者,我们都希望自己的应用能够在各种环境下稳定工作,尤其是离线功能——这直接关系到用户体验的底线。 本文将带你深入了解如何通过core-js解决Service Worker在不同浏览器中的兼容性问题,让...

gitblog_01002的博客 715

基于Vue.js与.NET Core的Lingbot模型管理平台开发全栈教程

本文介绍了如何开发一个基于Vue.js与.NET Core的Lingbot模型管理平台。该平台可部署于星图GPU平台,并实现lingbot-depth-pretrain-vitl-14镜像的自动化部署,从而简化AI模型的调用与管理流程,典型应用于自动化处理图像深度估计等视觉任务。

weixin_42603332的博客 210

Node.js单线程高并发原理:从内核中断到事件循环的完整技术栈解析

在服务器端开发中,高并发处理能力是衡量技术架构优劣的关键指标。传统多线程模型通过为每个连接分配独立线程来实现并发,但线程切换和内存开销较大。现代异步非阻塞I/O模型则采用事件驱动架构,其核心原理是利用操作系统提供的高效I/O多路复用机制(如Linux的epoll),在单线程中通过事件循环协调所有I/O操作。这种技术价值在于能够用极少的系统资源支撑海量连接,特别适合I/O密集型场景。Node.js正是这一架构的典型实现,其通过Libuv库抽象系统调用,结合V8引擎执行JavaScript代码,形成了从内核中断

aaa1231722的博客 367

WebContainer Core架构深度剖析:浏览器原生Node.js运行时引擎的技术实现

WebContainer Core作为StackBlitz推出的革命性技术栈,正在重新定义云端开发环境的构建范式。这项核心技术通过将完整的Node.js运行时环境嵌入浏览器,实现了无需服务器基础设施即可在Web端运行完整开发工作流的技术突破。对于技术决策者和架构师而言,WebContainer Core代表了云原生开发环境的未来方向,为构建交互式编程教育平台、在线代码编辑器、实时协作开发环境等应用

gitblog_00398的博客 1236

AutoResearchClaw 框架文档:Axolotl 训练 API 速查与 QLoRA/DPO 实战配置指南

本文围绕 AutoResearchClaw 仓库内置的 [axolotl.md](https://link.gitcode.com/i/2c79910e978c51f829e82c6fccee183e) 框架速查文档展开,系统梳理 Axolotl 的安装方式、CLI 三件套(训练 / 推理 / 合并 LoRA)、完整 YAML 训练配置、四种数据集格式以及 DPO 对齐配置,并结合仓库源码说明这份

gitblog_00866的博客 286

07 JS CORE 栈、队列和二维数组

2. 栈(stack)和队列(quene): js中没有专门的栈和队列类型                    一切栈和队列都是用普通数组模拟的    栈: 一端封闭,只能从另一端进出的数组     特点: FILO    何时: 今后只要希望始终使用最新的元素时    如何:       1. 从结尾出入栈:           入: arr.push(值) =&gt; arr[arr.len...

Pony_18的博客 364

JavaScript Promise 原理与实战:从状态机到微任务调度

Promise 是 JavaScript 异步编程的核心抽象,本质是一个封装时间不确定性的确定性状态机(pending/fulfilled/rejected),其价值在于提供可组合、可中断、错误可追溯的异步契约。它通过微任务队列(microtask queue)与事件循环协同,确保回调执行时机可控且优先级高于宏任务。理解 Promise 不仅关乎 async/await 语法糖的正确使用,更直接影响竞态控制、内存泄漏规避和真实业务场景(如 Token 续期、分片上传、防抖校验)的健壮实现。本文聚焦 Prom

weixin_33885676的博客 432

Rollbar.js 入门指南:一文搞懂 JavaScript 错误监控全貌(浏览器+Node 全覆盖)

Rollbar.js 是一款跨平台的 JavaScript 错误监控 SDK,它同时覆盖浏览器前端与 Node.js 后端环境,帮助开发者自动捕获、分组并实时分析应用中的错误。无论你是前端新手还是全栈开发者,读完本文就能快速上手,把线上错误从"用户投诉才知道"变成"秒级自动告警"。 ## Rollbar.js 是什么?为什么值得用? 一句话概括:Rollbar.js 是把你的 JavaScri

gitblog_00360的博客 782

让你理解: 事件循环 eventloop

面试官问起事件循环, 不会回答? 我来让你知道什么是事件循环

hmxs_hmbb的博客 758

浅析 JS 中的 EventLoop 事件循环(新手向)

序 Event Loop 这个概念相信大家或多或少都了解过,但是有一次被一个小伙伴问到它具体的原理的时候,感觉自己只知道个大概印象,于是计划着写一篇文章,用输出倒逼输入,让自己重新学习这个概念,同时也能帮助更多的人理解它~ 概念 JavaScript 是一门 单线程 语言,即同一时间只能执行一个任务,即代码执行是同步并且阻塞的。 eg. 这就像只有一个窗口的银行,客户需要一个一个排队办理业务。 ...

weixin_34318272的博客 224
上一篇: JavaScript Core -- 函数详解(作用域&&参数值传递&&this关键字&&函数声明)
下一篇: Nodejs Express 开发必备知识点
阿懒先生
博客等级 码龄15年 12粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值