详解 javascript 中并发与并行

这篇具有很好参考价值的文章主要介绍了详解 javascript 中并发与并行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。

详解 javascript 中并发与并行,# Javascript理论与实践,javascript,ecmascript

No. 内容链接
1 Openlayers 【入门教程】 - 【源代码+示例300+】
2 Leaflet 【入门教程】 - 【源代码+图文示例 150+】
3 Cesium 【入门教程】 - 【源代码+图文示例200+】
4 MapboxGL【入门教程】 - 【源代码+图文示例150+】
5 前端就业宝典 【面试题+详细答案 1000+】

详解 javascript 中并发与并行,# Javascript理论与实践,javascript,ecmascript


详解 javascript 中并发与并行,# Javascript理论与实践,javascript,ecmascript

一、并发(Concurrency)

在JavaScript中,由于浏览器和Node.js环境的执行模型,主要采用的是单线程(对于主线程而言)事件循环机制。这意味着JavaScript本身不直接支持多线程的并行执行,但在单线程环境中依然可以实现并发。这里的并发表现为:

  • 异步编程:JavaScript通过回调函数、Promise、async/await等机制处理异步操作(如网络请求、定时器、I/O操作等)。当主线程执行到异步操作时,不会阻塞而是继续执行后续代码,待异步操作完成后,事件循环会安排相应的回调函数在微任务队列或宏任务队列中执行。从外部观察,这些异步操作就像是在并发执行。

例如:

setTimeout(() => console.log('Timer'), 0);
console.log('Main thread');

在这个例子中,虽然"Timer"和"Main thread"看似并发执行(“Main thread"先输出,然后是"Timer”),但实际上它们并没有在物理意义上并行运行,而是在单个线程上按照事件循环机制顺序执行。

二、并行(Parallelism)

传统JavaScript引擎(如V8)在单个进程中是基于单线程模型的,因此在单个JavaScript进程中不能实现并行执行。然而,随着Web Worker API的引入以及Node.js对多进程和多线程的支持(如worker_threads模块),JavaScript现在可以在某种程度上实现并行计算。

  • Web Workers:Web Workers允许JavaScript在后台线程中执行脚本,从而实现多线程并行处理。主页面与Worker线程之间通过消息传递进行通信,Worker线程可以执行耗时任务,不影响主线程的UI渲染和其他响应性操作。
// 创建一个新的Web Worker
var myWorker = new Worker('worker.js');

myWorker.postMessage({ data: 'Hello World!' }); // 发送消息给worker

myWorker.onmessage = function(event) {
  console.log('Received message ' + event.data);
};

// 在worker.js中
self.onmessage = function(event) {
  console.log('Received message ' + event.data);
  // 处理耗时任务...
};
  • Node.js 多线程:Node.js提供worker_threads模块,允许在Node.js应用内部创建独立的工作线程,这些线程可以在多核CPU上并行执行任务。

三、总结

在JavaScript中,传统的单线程环境主要通过异步编程模型实现了并发,而非物理意义上的并行。而通过Web Worker或Node.js的多线程支持,可以在特定场景下实现真正的并行计算。文章来源地址https://www.toymoban.com/news/detail-859361.html

到了这里,关于详解 javascript 中并发与并行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BCSP-玄子前端开发之JavaScript+jQuery入门CH07_ECMAScript 6基础

    4.7.1 ECMAScript 6 简介 ECMAScript 6.0(简称 ES6) 是JavaScript语言的下一代标准 正式发布于2015年6月 目标 使JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言 版本升级 ECMAScript 2015 ECMAScript 2016 ECMAScript 2017 ECMAScript和JavaScript 的关系 前者是后者的规格,后者是前者的

    2023年04月27日
    浏览(54)
  • [JavaScript理论学习] 什么是Promise (含如何判断一个值是Promise)

    本文旨在对 Promise 的规范进行解释, 便于读者在学习 Promise 的过程中梳理 Promise 之间的操作关系, 不对具体的代码实现和Promise用法进行解释. 比如, 为什么 [MDN-await] 中要提及一个 thenable 对象, 而且这个 thenable 对象 还可以和 Promise 实例 一样使用 await 等待处理, 这就涉及到了下面

    2024年02月09日
    浏览(45)
  • JavaScript中的Concurrency并发:异步操作下的汉堡制作示例

    这篇文章想讲一下JavaScript中同步与异步操作在一个简单的示例中的应用。我们将以制作汉堡为例,展示如何使用同步方法、回调函数(callbacks)和Promise与async/await来实现该过程。 1. Get ingredients 获取原料(比如beef) 2. Cook the beef  烹饪牛肉 3. Get burger buns 获得面包片 4. Put th

    2024年02月02日
    浏览(41)
  • 深入理解JavaScript闭包:从概念到实践

    JavaScript是一门强大且灵活的编程语言,而闭包(Closure)则是JavaScript中一个非常重要且常用的概念。虽然闭包在JavaScript开发中经常被提及,但它的概念和工作原理可能对一些开发者来说仍然有些模糊。本篇博客旨在帮助读者深入理解JavaScript闭包,从概念到实践,让您能够充

    2024年02月16日
    浏览(47)
  • 【JavaScript】3.1 项目实践:制作一个简单的网页应用

    在此章节中,我们将学习如何使用JavaScript创建一个简单的网页应用。这将是一个待办事项列表应用,用户可以添加新的待办事项,标记已完成的事项,以及删除事项。通过这个项目,我们将学习如何使用JavaScript操作DOM,处理事件,以及使用localStorage进行数据存储。 我们的待

    2024年02月05日
    浏览(45)
  • 细说JavaScript函数(JavaScript函数详解)

    函数的作用就是封装一段JavaScript代码,让开发者可以通古简单的方式使用这段代码 一、函数的分类 在几乎所有的编程语言中,都有函数这一概念,并且没中语言本身都继承了丰富的函数,这类函数被称为系统函数或者内置函数,系统函数在语言设计时就已经定义好了,开发

    2024年02月01日
    浏览(47)
  • 【JavaScript】JavaScript基础详解(文末送书)

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 在 JavaScript 中,可以使用三种方式来声明

    2024年02月08日
    浏览(56)
  • 2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

    Linux把所有进程通过双向链表的方式连接起来组成任务队列,操作系统和cpu通过选择一个task_struct执行其代码来调度进程。 1.运行态:pcb结构体在运行或在运行队列中排队。 2.阻塞态:等待非cpu资源就绪(硬盘,网卡等资源) 3.挂起态:一个进程对应的代码和数据被操作系统因

    2024年01月22日
    浏览(45)
  • 【好书推荐】JavaScript Es8 函数式编程实践入门

    Anto Aravinth从事软件行业已经6年多了。他开发了许多用新技术编写的系统。Anto了解JavaScript的基础知识及其工作方式,并培训了许多人。Anto在业余时间也做OSS,他喜欢打乒乓球。 Srikanth Machiraju作为开发人员、架构师、技术培训师和社区发言人,拥有超过10年的工作经验。他目

    2024年02月08日
    浏览(40)
  • 深入理解Async/Await:从原理到实践的JavaScript异步编程指南

    理解 async/await 的原理和使用方法是理解现代JavaScript异步编程的关键。这里我会提供一个详细的实例,涵盖原理、流程、使用方法以及一些注意事项。代码注释会尽量详尽,确保你理解每个步骤。 实例:使用async/await进行异步操作 详细解释和注释: 异步函数定义: async func

    2024年02月05日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包