”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 并行 JavaScript 机

并行 JavaScript 机

发布于2024-11-06
浏览:429

作者:Vladas Saulis,PE Prodata,克莱佩达,立陶宛

2024 年 5 月 18 日

抽象的
本文提出了一种新的编程模型,可以以简单且自动平衡的方式利用多核 CPU 系统。该模型还提出了一种更简单的编程范例,用于在大多数大规模并行计算领域(例如天气预报、核物理、搜索引擎等)开发并行任务和系统。

近年来,由于新硬件架构的进步和更好的性能,我们面临着计算理念的新转变。多核架构将在不久的将来成为主流技术。

我们可以做什么来利用这一点?本文是关于我们可能拥有的解决方案之一。

所提出的计算模型(称为“对象流模型”)还为伯克利著名论文[1]中提出的问题提供了一些答案。以下是使用此模型可以实现的优点的简短列表:

· 简单的编程过程和进一步的维护

· 可以动态添加或删除对象处理单元 (OPU) 时的自然 OPU (CPU) 集成和迁移

· 自动负载均衡

· 任务各部分之间无需同步

· 系统级别很少或没有互锁

所有这些特性都在并行 JavaScript 机 (PJM) 中实现,本文档下面对此进行了描述。 PJM 可以被视为一个迷你操作系统,它控制多个 JavaScript 任务、多个用户和多个前端控制台。

介绍
PJM (OS) 的主要目标是通过引入特殊指令(提示)来简化并行编程,这些指令由专门制作的注释以 //#pragma .

的形式表示。

并行 JavaScript 机器使用 NodeJS,并被实现为前端的 Web 服务器,以及真正并行执行代码的 OPU 的服务器。 OPU 也是用 NodeJS 实现的小型 JavaScript 网络客户端。它们可以根据需要有任意多个,本地或远程连接到主并行机服务器。并行处理的整体性能很大程度上取决于连接的 OPU 的数量。

所有系统部件一起工作,可以被理解为一个迷你操作系统,它启动并解析正在运行的 JavaScript 任务,将它们的块放入系统执行队列中,并在选定的块之间提供某种协作多任务处理。通过主服务器将 OPU 的 console.log 输出管道化,将计算结果打印到 Web 客户端的控制台。每个 OPU 都分配给自己的 CPU(本地或远程),并通过简单的循环调度程序进行工作(稍后将进行解释)。这是通过使用 PM2 流程管理器节点模块来实现的。

“虽然与旧的二进制文件和 C 程序的兼容性对行业很有价值,并且一些研究人员正在努力帮助多核产品计划取得成功,但我们一直在思考更大胆的想法。我们的目标是实现数千个处理器……”[1] 不需要在单个物理计算机上,而是在整个网络中,所有这些都由中央服务器单元协调。从系统的角度来看,所有 CPU/OPU 都通过内部网络套接字协议进行操作,该协议不区分本地和远程 CPU。服务器 (PJM) 和客户端 (OPU) — 全部用 JavaScript 编写,因此它与 C 二进制文件不兼容。

在 PJM 中运行的所有并行程序不得使用 ES6 JavaScript 扩展(必须使用 ES5)。这里需要指出的是,诸如 类、箭头函数、let 和 const 之类的扩展,尤其是 async/await 很难并行化,需要更彻底的 JavaScript 内部研究。这就是 PJM 在 NodeJS V8.2.1 上运行的原因。所有节点模块都锁定到此版本,以获得更好的性能和概念清晰度。

PJM 是通过位于 http://parallel-js.net:8888 的 Web 控制台进行控制和运行的。它通常是这样的:

Parallel JavaScript Machine

Web 控制台是使用 ExtJS 框架编写的,并使用 express.js HTTP NodeJS 模块连接到 PJM 服务器。 Web 控制台的另一部分(称为控制台和消息)使用 WebSockets 连接。这是所有程序的输出和系统消息实时到达的地方。重要的是要知道,Web 控制台中没有执行任何真正的计算 - 所有计算都是在 PJM 服务器和 OPU 上完成的。

如果您对此项目感兴趣,请在此处找到完整的文章。

这个项目的源代码在这里。

版本声明 本文转载于:https://dev.to/vsaulis/parallel-javascript-machine-551k?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • React 中的 UseEffect
    React 中的 UseEffect
    欢迎来到 React Hooks 的世界!今天,我们将深入探讨最流行的挂钩之一:useEffect。别担心,我们会让它变得有趣且易于理解。那么,让我们开始吧! ? ?什么是useEffect useEffect 是一个 React Hook,允许您在功能组件中执行副作用。副作用是在组件外部发生的操作...
    编程 发布于2024-11-06
  • 如何在 Google Cloud Platform 免费层上构建现代数据平台
    如何在 Google Cloud Platform 免费层上构建现代数据平台
    我在 Medium.com 上发布了一系列七篇免费公开文章“如何在 Google Cloud Platform 免费层上构建现代数据平台”。 主要文章位于:https://medium.com/@markwkiehl/building-a-data-platform-on-gcp-0427500f...
    编程 发布于2024-11-06
  • 帖子 #f 挣扎
    帖子 #f 挣扎
    这篇文章是关于我迄今为止在编码和学习方面的挣扎 一个。我只能保持专注一个小时,最多两个小时。 b.我很容易分心 c.我不能久坐,否则我会开始感到烦躁和休息腿部问题。 我想到的有助于解决问题的解决方案 一个。我需要开始更频繁地使用我的番茄工作法应用程序 B. 我开始将手机调成振动,如果我有另一个屏幕...
    编程 发布于2024-11-06
  • 面向 Web 开发人员的热门 Chrome 扩展 4
    面向 Web 开发人员的热门 Chrome 扩展 4
    2024 年最适合 Web 开发者的 10 款 Chrome 扩展 随着 2024 年的进展,Chrome 扩展程序已成为 Web 开发人员工具包中不可或缺的一部分,在浏览器中提供强大的功能。在这篇文章中,我们将探讨今年在 Web 开发社区掀起波澜的 10 大 Chrome 扩展程...
    编程 发布于2024-11-06
  • 如何使用 React Router v4/v5 嵌套路由:简化指南
    如何使用 React Router v4/v5 嵌套路由:简化指南
    React Router v4/v5 的嵌套路由:简化指南使用 React Router 时,嵌套路由是组织的关键技术您的应用程序的导航。然而,新手经常面临设置嵌套路由的挑战。本文旨在简化使用 React Router v4/v5 的过程。React Router v4 在路由嵌套方式上引入了重大转...
    编程 发布于2024-11-06
  • 如何使用 UTF8 字符编码保留 MySQL 中的表格式?
    如何使用 UTF8 字符编码保留 MySQL 中的表格式?
    使用 UTF8 字符编码增强 MySQL 命令行格式使用存储在数据库表中的瑞典语和挪威语字符串时,查询数据时可能会遇到表格式问题使用不同的字符集。问题陈述默认情况下,使用“set names latin1;”产生失真的输出: ----------------------------------- ...
    编程 发布于2024-11-06
  • CSS 盒子模型
    CSS 盒子模型
    CSS 盒子模型是 Web 开发中的一个基本概念,它构成了 Web 布局和设计的基础。它决定了元素的大小、内容的呈现方式以及它们在网页上如何相互交互。掌握盒模型对于任何使用 HTML 和 CSS 的开发人员来说都是至关重要的,因为它会影响元素的显示、间隔和对齐方式。 在本文中,我们将详细探讨 CSS...
    编程 发布于2024-11-06
  • 我如何编写 CSS 选择器
    我如何编写 CSS 选择器
    有很多 CSS 方法,但我讨厌它们。有些多(顺风等),有些少(BEM、OOCSS 等)。但归根结底,它们都有缺陷。 当然,人们使用这些方法有充分的理由,并且解决的许多问题我也遇到过。因此,在这篇文章中,我想写下我自己的关于如何保持 CSS 组织的指南。 这不是一个任何人都可以开始使用的完整描述的 C...
    编程 发布于2024-11-06
  • 为什么输入元素不支持 HTML5 中的 ::after 伪元素?
    为什么输入元素不支持 HTML5 中的 ::after 伪元素?
    ::before 和 ::after 的伪元素兼容性在 HTML5 中,::before 和 ::after 伪元素可以使用附加内容(例如图标或复选标记)增强元素。然而,并非所有元素都完全支持这些伪元素。输入元素和 ::after在提供的示例中,::after 伪元素不是显示在输入元素上。这是因为类...
    编程 发布于2024-11-06
  • 如何使用 PHP 确定特定时区的星期几?
    如何使用 PHP 确定特定时区的星期几?
    在 PHP 中确定指定时区的星期几在 PHP 中处理日期和时间时,处理起来可能具有挑战性时区并计算具体值,例如星期几。本文将指导您完成使用 PHP 查找特定时区中的星期几的过程。了解用户的时区要确定用户的时区,您需要使用 PHP 函数 date_default_timezone_get()。此函数返...
    编程 发布于2024-11-06
  • 如何在 Go 通道中有效地生成不同的值?
    如何在 Go 通道中有效地生成不同的值?
    在 Go Channel 中高效生成不同值在 Go 中,Channel 为并发通信提供了强大的机制。但是,在使用通道时,您可能会遇到需要过滤掉重复值或确保仅发出不同值的情况。本文探讨了创建仅输出唯一值的通道的有效方法。生成不同值的挑战考虑以下场景:您有一个通道接收多个值,并且您希望迭代它,同时仅打印...
    编程 发布于2024-11-06
  • 如何使用 Tailwind CSS 设置 os Next.js
    如何使用 Tailwind CSS 设置 os Next.js
    要使用 Tailwind CSS 设置 Next.js,请按照以下步骤操作: 第 1 步:创建一个新的 Next.js 项目 如果您尚未创建 Next.js 项目,您可以使用 create-next-app 创建一个项目。 npx create-next-app@latest my-...
    编程 发布于2024-11-06
  • 如何解决 PHPmailer HTML 内容渲染问题?
    如何解决 PHPmailer HTML 内容渲染问题?
    PHPmailer 无法渲染 HTML 内容使用 PHPmailer 发送电子邮件时,用户遇到 HTML 代码显示为原始文本的问题交货时。尽管使用了 IsHTML() 方法,所需的 HTML 内容仍然无法访问。潜在问题此行为背后的原因在于方法调用的顺序。与它的前身不同,PHPMailer 6 要求在...
    编程 发布于2024-11-06
  • 如何使用 Java 从 HTML 文档中提取数据?
    如何使用 Java 从 HTML 文档中提取数据?
    Java HTML解析要从网站获取数据,首先必须了解HTML文档的结构。 HTML 元素使用标签进行组织,标签指定每个元素的类型和内容。例如,以下 HTML 表示具有特定 CSS 类的 div 标签:<div class="classname"></div>...
    编程 发布于2024-11-06
  • 为什么 Java 异常处理代码会产生“132Exception in thread main MyExc1”而不是“13Exception in thread main MyExc2”?
    为什么 Java 异常处理代码会产生“132Exception in thread main MyExc1”而不是“13Exception in thread main MyExc2”?
    Java中的异常处理:解开歧义在一个令人费解的Java异常处理场景中,一个大学问题提出了以下代码片段: // Exception Heirarchy class MyExc1 extends Exception {} class MyExc2 extends Exception {} class M...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3