当前位置: 首页 > backend >正文

线程、线程池、异步

目录

什么是线程

什么是线程池

什么是异步

异步与线程关系

JS中的异步


什么是线程

线程 Thread 是计算机执行的最小单位,是 进程 内的一个实体,可以被操作系统独立调用和执行

线程可以理解为进程内的“程序执行流”,一个进程可以包含多个线程,所有线程共享该进程的资源,但每个线程都有自己的执行堆栈和程序计数器

多线程可以并行执行

在浏览器环境(多线程)中, JS (单线程)通常运行在 主线程(UI线程)上,浏览器还有渲染线程、网络线程、Web Worker 线程(允许JS在后台运行不阻塞UI)

一般浏览器的多 进程 架构:

1.浏览器主进程:负责UI交互、子进程管理等等

2.渲染进程:负责处理HTML、CSS、JS的解析,JS一般就是这里面的主进程

3.网络进程:处理网络请求

4.GPU进程:处理图形绘制

5.插件进程:运行浏览器插件

什么是线程池

线程池是一种线程使用模式,预先创建一定数量的线程,然后重复使用这些线程执行任务,而不是为了每个任务创建和销毁线程

在需要执行任务时从池中取出一个空闲线程来执行,任务完成后不会消毁,而是返回池中

主要组成部分

        线程集合

        任务队列

        线程管理机制

线程池优势

        不用频繁创建和销毁线程,提高效率

        就像先开了一个静态数组一样,可以提高资源的管理性

        提高响应速度

在浏览器中的应用

        网络线程池:处理多个并发网络请求

        工作线程池:处理后台任务

        渲染线程池:用于页面渲染

什么是异步

异步是一种程序执行的模式,它允许程序在等待某个操作完成的同时继续执行其他代码,而不是等待该操作完成,在异步操作完成后,程序会得到通知(通常是回调函数、Promise、async/await)

同步是像队列一样一步步执行,如果某个操作耗时过长,会导致阻塞

使用异步提高效率的同时,可能也会因为回调导致代码复杂性提高,不易维护

异步与线程关系

异步是目的,线程是实现手段,比如构造线程池

异步不局限于线程:

        硬件级异步:如DMA(直接内存访问)技术允许硬件设备独立完成数据传输,无需CPU干预

        系统级异步:比如windows的IOCP(IO完成端口)

        单线程异步:比如JS、Go的协同等,通过任务调度(外部)在单线程内实现异步 

在异步框架(如 Node.js )中,主线程处理I/O回调,计算密集型任务仍然在工作线程执行      

JS中的异步

JS是单线程主要是为了简化DOM操作,防止多个线程同时修改DOM 

JS作为单线程语言,如果不使用异步会导致阻塞

于是JS利用浏览器内置的多线程功能,加上事件循环和回调队列的协作来实现

1.回调函数

setTimeout(() => {console.log("这段代码会在3秒后执行");
}, 3000);

2.Promise

fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('出错了:', error));

3.Async/Await

async function fetchData() {try {const response = await fetch('https://api.example.com/data');const data = await response.json();console.log(data);} catch (error) {console.error('出错了:', error);}
}

还有像事件监听器就是一个异步例子,它在浏览器主线程上注册

http://www.xdnf.cn/news/7858.html

相关文章:

  • 人脸识别,使用 deepface + api + flask, 改写 + 调试
  • 【沉浸式求职学习day46】【华为5.7暑期机试题目讲解】
  • 广东省省考备考(第十六天5.21)—言语:语句排序题(听课后强化)
  • Mcu_Bsdiff_Upgrade
  • 数据结构与算法——堆
  • ThreadPoolTaskExecutor 和 ThreadPoolExecutor 的使用场景
  • (vue)前端实现下载后端提供的URL文件
  • 设计模式1 ——单例模式
  • 前后端的双精度浮点数精度不一致问题解决方案,自定义Spring的消息转换器处理JSON转换
  • LeetCode117_填充每个结点的下一个右侧结点指针Ⅱ
  • WPS深度适配鸿蒙电脑折叠形态,国产替代下的未来何在?
  • L53.【LeetCode题解】二分法习题集2
  • 关于收集 Android Telephony 网络信息的设计思考2
  • WinForms 应用中集成 OpenCvSharp 实现基础图像处理
  • 基于AI大语言模型的历史文献分析在气候与灾害重建中的技术-以海南岛千年台风序列重建为例
  • C++初阶-vector的模拟实现2
  • 前端(小程序)学习笔记(CLASS 1):组件
  • 强化学习入门:RL开发框架Gym简介
  • App 出海:全渠道营销如何通过性能监控与精准归因实现增长
  • 【209. 长度最小的子数组】
  • shell脚本之函数详细解释及运用
  • 【深度估计 Depth Estimation】数据集介绍
  • [Java实战]Spring Boot整合Seata:分布式事务一致性解决方案(三十一)
  • 云祺容灾备份系统公有云备份与恢复实操-华为云
  • 【机器学习】支持向量机(SVM)
  • Suricata 3规则介绍、以及使用
  • 亚马逊AWS跑不动了?
  • 港股IPO市场火爆 没有港卡如何参与港股打新?
  • 网络爬虫(Web Crawler)详解
  • 第九届电子信息技术与计算机工程国际学术会议(EITCE 2025)