ホームページ  >  記事  >  ウェブフロントエンド  >  並列 JavaScript マシン

並列 JavaScript マシン

WBOY
WBOYオリジナル
2024-08-24 11:04:35911ブラウズ

著者: Vladas Saulis、PE Prodata、クライペダ、リトアニア

2024 年 5 月 18 日

要約
このペーパーでは、シンプルかつ自動バランスの取れた方法でマルチコア CPU システムを利用できる新しいプログラミング モデルを紹介します。このモデルは、天気予報、核物理学、検索エンジンなど、ほとんどの大規模並列計算分野で並列タスクやシステムを開発するためのより簡単なプログラミング パラダイムも提案します。

最近、私たちは新しいハードウェア アーキテクチャの進歩とパフォーマンスのさらなる向上によって、コンピューティング哲学の新たな変化に直面しています。マルチコア アーキテクチャは近い将来、普及するテクノロジーになるでしょう。

これを活用するにはどうすればよいでしょうか?この文書は、私たちが考えられる解決策の 1 つに関するものです。

提案されたコンピューティング モデル (「オブジェクト フロー モデル」と名付けられています) は、Berkeley から出版された有名な論文 [1] で提起された質問に対するいくつかの答えも提供します。このモデルを使用して得られる利点の短いリストを次に示します:

・簡単なプログラミングプロセスとさらなるメンテナンス

・オブジェクト処理ユニット (OPU) をオンザフライで追加または削除できる場合の、自然な OPU (CPU) の統合と移行

・自動負荷分散

・タスクパート間の同期は必要ありません

・システムレベルでの相互ロックはほとんど、またはまったくありません

これらの特性はすべて、このドキュメントで後述する Parallel JavaScript Machine (PJM) に実装されています。 PJM は、複数の JavaScript タスク、複数のユーザー、および複数のフロントエンド コンソールを制御するミニ オペレーティング システムとして認識される場合があります。

はじめに
PJM (OS) の主な目的は、//#pragma の形式で特別に作成されたコメントによって表される特別な命令 (ヒント) を導入することで並列プログラミングを簡素化することです。

Parallel JavaScript Machine は NodeJS を使用し、フロントエンドの Web サーバーとして、また実際にコードの並列実行を行う OPU のサーバーとして実装されます。 OPU も NodeJS で実装された小規模な JavaScript ネットワーク クライアントです。必要な数だけそれらをメインの並列マシン サーバーにローカルまたはリモートで接続できます。並列処理の全体的なパフォーマンスは、接続されている OPU の数に大きく依存します。

すべてのシステム部分は連携して動作し、実行中の JavaScript タスクを起動して解析し、それらのチャンクをシステム実行キューに入れ、選択されたチャンク間である種の協調的なマルチタスクを提供するミニ OS として理解できます。計算結果は、OPU からメイン サーバーを介して console.log 出力をパイプライン処理することにより、Web クライアントのコンソールに出力されます。すべての OPU は独自の CPU (ローカルまたはリモート) に割り当てられ、単純なラウンドロビン スケジューラを通じて動作します (後で説明します)。これは、PM2 プロセス マネージャー ノード モジュールを使用して実現されます。

「古いバイナリや C プログラムとの互換性は業界にとって貴重であり、一部の研究者はマルチコア製品計画の成功を支援しようとしていますが、私たちはより大胆な考えを考えてきました。私たちの目標は、何千ものプロセッサを実現することです…」[1] 単一の物理コンピュータ上では必要ありませんが、ネットワーク全体で、すべてが中央サーバー ユニットによって調整されます。システムの観点から見ると、すべての CPU/OPU は、ローカル CPU とリモート CPU を区別しない内部ネットワーク ソケット プロトコルを介して動作します。サーバー (PJM) とクライアント (OPU) — すべて JavaScript で書かれているため、C バイナリとは [まだ] 互換性がありません。

PJM で実行されているすべての並列プログラムは、ES6 以降の JavaScript 拡張機能を使用してはなりません (ES5 を使用する必要があります)。ここで重要なのは、

クラス、アロー関数、lets と 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 コンソールの別の部分 (コンソールとメッセージと呼ばれる) は、WebSocket を使用して接続されます。ここには、すべてのプログラムの出力とシステム メッセージがリアルタイムで送信されます。 Web コンソールでは実際の計算は実行されないことを知っておくことが重要です。すべての計算は PJM サーバーと OPU で実行されます。

このプロジェクトに興味がある場合は、ここで記事全文をご覧ください。

このプロジェクトのソースコードはここにあります。

以上が並列 JavaScript マシンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。