」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 平行 JavaScript 機

平行 JavaScript 機

發佈於2024-11-06
瀏覽:995

作者: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 的開發人員來說都是至關重要的,因為它會影響元素的顯示、間隔和對齊方式。 在本文中,我們將詳細探討 CS...
    程式設計 發佈於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-ne...
    程式設計 發佈於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 MyExc3 extends MyExc2 {...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3