#Js篇:单线程模式&&同步任务&&异步任务&&任务队列&&事件循环&&setTimeout()&& setInterval()

单线程模式

之所以采用单线程,而不是多线程,跟历史有关系。原因是不想让浏览器变得太复杂,因为多线程需要共享资源、且有可能修改彼此的运行结果,对于一种网页脚本语言来说,太复杂了。

好处

实现起来比较简单,执行环境相对单纯

坏处

1、 只有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。

2、 常见的浏览器无响应---假死,往往就是因为某一段js代码长时间运行---比如死循环,导致整个页面卡在这个地方,其他任务无法执行。

同步任务

定义:没有被引擎难挂起、在主线程上执行的任务。
前一个任务完成,才能执行下一个任务

通俗:是按照他们在代码中出现的顺序一次执行任务

异步任务

定义:被引擎放在一边,不进入主线程、而进入任务队列的任务。
只有引擎任务某个异步任务可以执行了,该任务才会进入主线程执行。

通俗:在当前任务不被阻塞的情况下执行任务

操作流程:串行执行 / 并行执行

任务队列

定义:用来存放异步任务的队列。

包括:定时器回调、事件处理函数、Promise的异步操作等

事件循环

定义:是一种程序结构,用于处理任务队列中的任务。js运行时(浏览器)中存在一个主线程,事件循环负责不断的检查任务队列,如果任务队列中有任务,就将任务取出并执行。

setTimeout()

定义:指定某个函数或某段代码,在多少浩淼之后执行。

参数: setTimeout(callback, delay, param1, param2, ...);

返回: 一个整数,表示定时器的编号,以后可以用来取消这个定时器。

setInterval()

定义: 指定某个任务每隔一段时间就执行一次,也就是无限次的定时执行

相关推荐
swany9 分钟前
同步数据中,只需要几秒钟 & milvus向量数据库不可用 dify1.16.1 升级后踩坑记录
开发语言·python·numpy
小杍随笔11 分钟前
2025年Rust GUI框架实战万字避坑指南
开发语言·后端·rust
geovindu18 分钟前
CSharp: LogHelper
开发语言·后端·c#·.net
奈斯先生Vector25 分钟前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
海带紫菜菠萝汤28 分钟前
FFmpeg.wasm 实践:在浏览器中运行 FFmpeg 的能力边界与性能瓶颈
前端·javascript·ffmpeg·音视频·wasm
冻柠檬飞冰走茶29 分钟前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
名字还没想好☜35 分钟前
React 受控输入框光标跳到末尾:格式化输入时的 selection 丢失 bug 与修复
前端·javascript·react.js·bug·react·next.js
upgrador1 小时前
桌面应用开发:Electron 与 NSIS 的关系、打包流程及 Windows 本地构建实战
javascript·windows·electron
Richard.Wong1 小时前
qt生成dll供C#调用
开发语言·qt
我要两颗404西柚1 小时前
Stage three:VUE工程化与实战工具
前端·javascript·vue.js