検索
ホームページウェブフロントエンドjsチュートリアル平行javaScriptを使用したパラレルJavaScript

paralleljs:エレガントなWebワーカーソリューション

Paralleljsは、Webワーカーを使用するときに発生する可能性のある問題に対するエレガントなソリューションを提供し、便利な抽象化とヘルパーツールを備えた実用的なAPIを提供します。 HTML5によって導入されたワーカーインターフェイスにより、長期的な時間と高い計算需要で機能を作成できます。これは、ウェブサイトの応答速度を改善するために同時に使用できます。 ParalleljsはJavaScriptコードの並列化を可能にし、同時マルチスレッド(SMT)を活用して、最新のCPUをより効率的に使用します。 ParallelJSライブラリは、計算、プロセスデータ、および断片化の断片化の結果を並行して実行するために使用されるspawnmapなどのメソッドを提供します。 reduce

HTML5が提起した最もクールな新しい可能性の1つは、Web Workers APIのワーカーインターフェイスです。その前に、ユーザーに応答性の高いWebサイトを示すためにいくつかのヒントを採用する必要がありました。ワーカーインターフェイスにより、長期的な時間と高い計算需要で関数を作成できます。さらに、労働者インスタンスを同時に使用することができ、必要に応じてこれらの労働者の任意の数を生成できるようになります。この記事では、マルチスレッドが重要である理由と、Paralleljsを使用してJavaScriptに実装する方法について説明します。

なぜマルチスレッドが必要なのですか?

これは合理的な質問です。歴史的に、スレッドを生成する機能は、プロセスで作業を分割するエレガントな方法を提供します。オペレーティングシステムは、各スレッドで利用可能な時間をスケジュールする責任があるため、優先度が高く、ワークロードが高いスレッドは、優先度の低いアイドルスレッドよりも優先されます。過去数年間で、同時マルチスレッド(SMT)が最新のCPUコンピューティングパワーにアクセスする鍵となっています。その理由は単純です。ムーアの法則は、単位面積あたりのトランジスタの数に関して依然として有効です。ただし、さまざまな理由で周波数スケーリングを停止する必要があります。したがって、利用可能なトランジスタは他の方法で使用する必要があります。建築の改善(SIMDなど)やマルチコアが最良の選択であることが決定されています。

Parallel JavaScript with ParallelJS s

は次の式で与えられていると述べています。

ここで、Parallel JavaScript with ParallelJS n

は並列労働者の数(プロセッサ、コア、またはスレッドなど)であり、

pは並列部分です。将来的には、並列アルゴリズムに依存するより多くのマルチコアアーキテクチャを使用できます。高性能コンピューティングの分野では、GPUシステムとIntel Xeon Phiなどの特別なアーキテクチャは、そのようなプラットフォームを表しています。最後に、一般的な同時アプリケーションまたはアルゴリズムと並列実行を区別する必要があります。並列性は、計算の(おそらく関連性の高い)同時実行です。逆に、同時性は独立した実行プロセスの組み合わせです。 JavaScriptのマルチスレッド

JavaScriptでは、同時プログラムの作成方法、つまりコールバック関数を使用する方法を既に知っています。この知識は、並列プログラムの作成に移行できるようになりました!独自の構造によれば、JavaScriptは、イベントループ(通常は反応器パターンに従う)によって媒介される単一のスレッドで実行されます。たとえば、これにより、(外部)リソースへの非同期リクエストを処理するための優れた抽象化が提供されます。また、以前に定義されたコールバックが常に同じ実行スレッドで常に起動されることを保証します。クロススレッドの例外、人種条件、またはスレッドに関連するその他の問題はありません。ただし、これはJavaScriptのSMTに近づくことはありません。ワーカーインターフェイスの導入により、エレガントなソリューションが見つかりました。主なアプリケーションの観点から、Webワーカーのコードは、同時に実行されるタスクと見なされる必要があります。このようにコミュニケーションも実施されます。メッセージAPIを使用します。これは、含まれるWebサイトからホストされたページまでの通信にも使用できます。たとえば、次のコードは、イニシエーターにメッセージを送信することにより、着信メッセージに応答します。

window.addEventListener('message', function (event) {
    event.source.postMessage('Howdy Cowboy!', event.origin);
}, false);

理論的には、Webワーカーは別のWebワーカーを生成することもできます。ただし、実際、ほとんどのブラウザはこれを禁止しています。したがって、Webワーカー間で通信する唯一の方法は、メインアプリケーションを使用することです。メッセージによる通信は同時に行われるため、非同期(非ブロッキング)通信のみが実行されます。最初は、これはプログラミングでは奇妙かもしれませんが、多くの利点をもたらします。最も重要なことは、私たちのコードには人種条件がないはずです! 2つのパラメーターを使用してシーケンスの開始と終了を表して、バックグラウンドで一連の素数を計算する簡単な例を見てみましょう。まず、次のコンテンツを含むprime.jsというファイルを作成します。

onmessage = function (event) {
    var arguments = JSON.parse(event.data);
    run(arguments.start, arguments.end);
};
function run (start, end) {
    var n = start;

    while (n < end) {
        var k = Math.sqrt(n);
        var found = false;

        for (var i = 2; !found && i <= k; i++) {
            found = n % i === 0;
        }

        if (!found) {
            postMessage(n.toString());
        }

        n++;
    }
}
次に、メインアプリケーションで次のコードを使用して、バックグラウンドワーカーを起動する必要があります。

if (typeof Worker !== 'undefined') {
    var w = new Worker('prime.js');
    w.onmessage = function(event) {
        console.log(event);
    };
    var args = { start : 100, end : 10000 };
    w.postMessage(JSON.stringify(args));
}
かなりの作業がたくさんあります。特に迷惑なのは、別のファイルを使用することです。これは素晴らしい分離をもたらしますが、小さなタスクでは完全に冗長に見えます。幸いなことに、解決策があります。次のコードを検討してください:

もちろん、そのような魔法の数字(13および14)よりも優れたソリューションが必要な場合があり、ブラウザに応じて、BlobとCreateObjecturlのフォールバックを使用する必要があります。あなたがJavaScriptの専門家でない場合、Fsubstr(13、fs.length -14)は関数本体を抽出することです。これを行い、関数宣言を文字列(toString()で呼び出す)に変換し、関数自体の署名を削除します。
var fs = (function () { 
    /* code for the worker */ 
}).toString(); 
var blob = new Blob(
   [fs.substr(13, fs.length - 14)],
   { type: 'text/javascript' }
);
var url = window.URL.createObjectURL(blob);
var worker = new Worker(url);
// Now setup communication and rest as before

paralleljsは役立ちますか?

これは、Paralleljsが出てくる場所です。これは、Webワーカーだけでなく、ある程度の利便性のために素晴らしいAPIを提供します。多くの補助ツールと非常に便利な抽象化が含まれています。最初に処理するデータを提供します。

データフィールドは、提供された配列を生成します。 「並列」操作はまだ呼ばれていません。ただし、インスタンスPには、新しいWebワーカーが作成されるSpawnなどのメソッドのセットが含まれています。それは約束を返し、それが結果を風にするものにします。
var p = new Parallel([1, 2, 3, 4, 5]);
console.log(p.data);
window.addEventListener('message', function (event) {
    event.source.postMessage('Howdy Cowboy!', event.origin);
}, false);

上記のコードの問題は、計算が実際に並行していないことです。データの配列全体を一度に処理する単一の背景ワーカーのみを作成します。完全な配列を処理した後にのみ、結果を取得できます。より良い解決策は、並列インスタンスのマップ関数を使用することです。

onmessage = function (event) {
    var arguments = JSON.parse(event.data);
    run(arguments.start, arguments.end);
};
function run (start, end) {
    var n = start;

    while (n < end) {
        var k = Math.sqrt(n);
        var found = false;

        for (var i = 2; !found && i <= k; i++) {
            found = n % i === 0;
        }

        if (!found) {
            postMessage(n.toString());
        }

        n++;
    }
}

前の例では、コアは非常に単純で、単純すぎる可能性があります。実際の例では、多くの操作と機能が関与します。必要な関数を使用して、インポートされた関数を含めることができます。

if (typeof Worker !== 'undefined') {
    var w = new Worker('prime.js');
    w.onmessage = function(event) {
        console.log(event);
    };
    var args = { start : 100, end : 10000 };
    w.postMessage(JSON.stringify(args));
}

機能は、断片化された結果を単一の結果に集約するのに役立ちます。これは、すべてのサブレクストを知った後、サブルルトを収集し、特定の操作を実行するための便利な抽象化を提供します。

結論

Paralleljsは、Webワーカーを使用するときに発生する可能性のある問題を回避するためのエレガントな方法を提供します。さらに、いくつかの便利な抽象化とヘルパーを備えた素敵なAPIを取得します。将来、さらなる改善を統合できます。 JavaScriptでSMTを使用できることに加えて、ベクトル化を使用することもできます。サポートされている場合、Simd.jsは実行可能なアプローチのようです。一部の(できればそれほど遠くない)未来では、コンピューティングにGPUを使用することも有効なオプションになる場合があります。 node.jsには、cuda(並列コンピューティングアーキテクチャ)のラッパーがありますが、元のJavaScriptコードはまだ不可能です。それまでは、Paralleljsは、マルチコアCPUを利用して長期にわたるコンピューティングを処理するための最良の選択でした。あなたも? JavaScriptを使用して、最新のハードウェアの力を解き放ちますか?

Paralleljsを使用したParalleljs上の

Paralleljsとは何ですか?それはどのように機能しますか?

Paralleljsは、マルチコアプロセッサを活用してデータ処理を並列化できるJavaScriptライブラリです。新しい並列オブジェクトを作成し、それに一連のデータを渡すことで機能します。このデータは、アレイ内の各アイテムに指定された関数を適用する

メソッドを使用して並行して処理できます。次に、結果を新しい配列で返します。 .map()

paralleljsをインストールする方法は?

paralleljsは、npm(node.jsパッケージマネージャー)を使用してインストールできます。端末にコマンド「npmインストールparalleljs」を実行するだけです。インストールが完了したら、「var parallel = require( 'paralleljs');」を使用してJavaScriptファイルに参照できます。

Paralleljsを使用することの利点は何ですか?

Paralleljsを使用すると、マルチコアプロセッサでデータ処理タスクを最大限に活用できます。これにより、大規模なデータセットの処理時間を大幅に高速化できます。また、並列化コードを簡単にするシンプルで直感的なAPIも提供します。

ブラウザでParalleljsを使用できますか?

はい、パラレルJSをブラウザで使用できます。 ScriptタグとParallelJSファイルのURLを使用して、HTMLファイルに含めることができます。含まれると、node.jsのように並列オブジェクトを使用できます。

並行して.map()メソッドを使用する方法は?

Paralleljsのメソッドは、データ配列の各アイテムに関数を適用するために使用されます。この関数は、文字列として.map()メソッドに渡されます。次に、結果を新しい配列で返します。たとえば、「var p = new parallem([1、2、3]); p.map( 'function(n){return n * 2;}');」 ]新しい配列。 .map()

並列jsの

メソッドは何ですか? .reduce()

ParallelJSのメソッドは、指定された関数を使用してデータの配列を単一の値に削減するために使用されます。この関数は、文字列として

メソッドに渡されます。たとえば、「var p = new paralled([1、2、3]); p.reduce( 'function(a、b){return a b;}');」 .reduce() .reduce()並列jsでメソッドをリンクできますか?

はい、並列jsのメソッドをリンクできます。たとえば、

メソッドを使用してデータを処理してから、

メソッドを使用して結果を単一の値に結合できます。 .map() .reduce()パラレルJでエラーを処理する方法は?

ParallelJSのエラーは、

メソッドを使用して処理できます。この方法は、処理中にエラーが発生した場合に呼び出される関数を受け入れます。エラーオブジェクトはこの関数に渡されます。

.catch()他のJavaScriptライブラリとParalleljsを使用できますか?

はい、Paralleljsは他のJavaScriptライブラリで使用できます。ただし、

メソッドを使用して、ワーカーコンテキストにライブラリを含めることを確認する必要があります。

.require() Paralleljsはすべてのデータ処理タスクに適していますか?

Paralleljsは大規模なデータセットの処理時間を大幅に高速化できますが、すべてのタスクに最適な選択肢ではない場合があります。小さなデータセットの場合、労働者の作成とデータの転送のオーバーヘッドは、並列化の利点を上回る可能性があります。特定のユースケースで平行JSをテストして、パフォーマンスの利点を提供するかどうかを確認することをお勧めします。

以上が平行javaScriptを使用したパラレルJavaScriptの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

node.jsは、型を使用してストリーミングしますnode.jsは、型を使用してストリーミングしますApr 30, 2025 am 08:22 AM

node.jsは、主にストリームのおかげで、効率的なI/Oで優れています。 ストリームはデータを段階的に処理し、メモリの過負荷を回避します。大きなファイル、ネットワークタスク、リアルタイムアプリケーションの場合。ストリームとTypeScriptのタイプの安全性を組み合わせることで、パワーが作成されます

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。