js单线程、同步、异步

简介: 什么是单线程?同步、异步的产生?

什么是单线程?同步、异步的产生?

JS属于单线程,虽然存在webworker(创造多线程环境,允许主线程创建线程,将一些任务分配给后者运行),但是webworker也只能进行一些计算任务,不能直接操作DOM。

这是为什么呢?这是因为在浏览器的实际运行中,不能存在同时多个线程操作DOM的现象。比如说,线程a增加DOM,线程b删除DOM。这样页面的绘制就混乱了,所以说需要串行执行。

异步的产生

单线程及任务串行执行,后一个任务需要等待前一个执行完毕方可执行,在这个过程中就出现了等待时间。

但是在ajax网络请求、setTimeout、DOM事件的用户交互(如addEventListener)等,这些任务的执行只是长时间的空等,而并不消耗CPU,因此产生了异步。

这也是推崇js异步的优势之一,我们可以将不相连的分支功能交给对应的异步中处理,这样主线程的效率将大大提升,可以并行去处理其他的功能操作。

异步是主线程cpu跳过任务等待,先处理任务顺序中后续任务。

同步的利用

当异步完后,主线程结束掉了上一个任务处于空闲时,主线程此时会读取相应的callback回调,执行回调中的事件,最大程度的使用cpu,此时便是同步。

同步是主线程按照任务顺序,串行执行任务。

目录
相关文章
|
2月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
106 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
1月前
|
JSON 前端开发 JavaScript
在 JavaScript 中,如何使用 Promise 处理异步操作?
通过以上方式,可以使用Promise来有效地处理各种异步操作,使异步代码更加清晰、易读和易于维护,避免了回调地狱的问题,提高了代码的质量和可维护性。
|
1月前
|
Java 调度
Java 线程同步的四种方式,最全详解,建议收藏!
本文详细解析了Java线程同步的四种方式:synchronized关键字、ReentrantLock、原子变量和ThreadLocal,通过实例代码和对比分析,帮助你深入理解线程同步机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Java 线程同步的四种方式,最全详解,建议收藏!
|
2月前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
45 1
|
2月前
|
前端开发 JavaScript 开发者
JS 异步解决方案的发展历程以及优缺点
本文介绍了JS异步解决方案的发展历程,从回调函数到Promise,再到Async/Await,每种方案的优缺点及应用场景,帮助开发者更好地理解和选择合适的异步处理方式。
|
2月前
|
移动开发 JavaScript 前端开发
【JavaScript】JS执行机制--同步与异步
【JavaScript】JS执行机制--同步与异步
23 1
|
2月前
|
安全 调度 C#
STA模型、同步上下文和多线程、异步调度
【10月更文挑战第19天】本文介绍了 STA 模型、同步上下文和多线程、异步调度的概念及其优缺点。STA 模型适用于单线程环境,确保资源访问的顺序性;同步上下文和多线程提高了程序的并发性和响应性,但增加了复杂性;异步调度提升了程序的响应性和资源利用率,但也带来了编程复杂性和错误处理的挑战。选择合适的模型需根据具体应用场景和需求进行权衡。
|
2月前
多线程通信和同步的方式有哪些?
【10月更文挑战第6天】
107 0
|
2月前
|
网络协议 安全 Java
难懂,误点!将多线程技术应用于Python的异步事件循环
难懂,误点!将多线程技术应用于Python的异步事件循环
79 0
|
3月前
|
JavaScript 前端开发
一个js里可以有多少个async function,如何用最少的async function实现多个异步操作
在 JavaScript 中,可以通过多种方法实现多个异步操作并减少 `async` 函数的数量。