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

线程、线程池、异步

目录

什么是线程

什么是线程池

什么是异步

异步与线程关系

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);}
}

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

相关文章:

  • OpenHarmony外设驱动使用 (九),Pin_auth
  • [Harmony]自定义导航栏
  • OpenHarmony外设驱动使用 (十),Sensor
  • DeepSeek 的强化学习优化策略:RLHF 与 DPO 的应用
  • canvas(二)-动画(2d)
  • 如果有三个服务实例部署在三台不同的服务器上,这三个服务实例的本地缓存,是存储一模一样的数据?还是各自只存一部分?
  • 《算法笔记》12.1小节——字符串专题->字符串hash进阶 问题 A: 求最长公共子串(串)
  • vscode连接本地Ubuntu
  • Docker安装Fluentd采集中间件
  • OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB
  • 嵌入式学习的第二十五天-系统编程-文件相关函数-标准I0+文件IO
  • 视觉生成新突破!仅0.5B参数,SimpleAR解锁预训练、SFT、RL全能模式
  • 使用 Vue 展示 Markdown 文本
  • 【Java高阶面经:微服务篇】7. 1秒响应保障:超时控制如何成为高并发系统的“救火队长”?
  • 期刊采编系统安装升级错误
  • 软考 系统架构设计师系列知识点之杂项集萃(66)
  • Nginx负载均衡配置详解
  • 回溯算法——排列篇
  • 阿里云ecs 8核 16G 内存 装有redis6 分配了3G内存,和2个tomcat 每个tomcat 4G 服务器反应迟钝,如何确认不是redis的问题
  • web.py使用时报错AttributeError: No template named image_window
  • 自己做网站建议/app制作
  • 易捷商城小程序/福州seo公司排名
  • 宁波海曙网站开发公司/河南百度seo
  • aspx网站开发/销售技巧和话术
  • 自己怎么开网站做销售/发表文章的平台有哪些
  • 有专门做最佳推荐的网站/seo3的空间构型