paralleljs:エレガントなWebワーカーソリューション
Paralleljsは、Webワーカーを使用するときに発生する可能性のある問題に対するエレガントなソリューションを提供し、便利な抽象化とヘルパーツールを備えた実用的なAPIを提供します。 HTML5によって導入されたワーカーインターフェイスにより、長期的な時間と高い計算需要で機能を作成できます。これは、ウェブサイトの応答速度を改善するために同時に使用できます。 ParalleljsはJavaScriptコードの並列化を可能にし、同時マルチスレッド(SMT)を活用して、最新のCPUをより効率的に使用します。 ParallelJSライブラリは、計算、プロセスデータ、および断片化の断片化の結果を並行して実行するために使用されるspawn
、map
、reduce
なぜマルチスレッドが必要なのですか?
これは合理的な質問です。歴史的に、スレッドを生成する機能は、プロセスで作業を分割するエレガントな方法を提供します。オペレーティングシステムは、各スレッドで利用可能な時間をスケジュールする責任があるため、優先度が高く、ワークロードが高いスレッドは、優先度の低いアイドルスレッドよりも優先されます。過去数年間で、同時マルチスレッド(SMT)が最新のCPUコンピューティングパワーにアクセスする鍵となっています。その理由は単純です。ムーアの法則は、単位面積あたりのトランジスタの数に関して依然として有効です。ただし、さまざまな理由で周波数スケーリングを停止する必要があります。したがって、利用可能なトランジスタは他の方法で使用する必要があります。建築の改善(SIMDなど)やマルチコアが最良の選択であることが決定されています。
は次の式で与えられていると述べています。
ここで、 pは並列部分です。将来的には、並列アルゴリズムに依存するより多くのマルチコアアーキテクチャを使用できます。高性能コンピューティングの分野では、GPUシステムとIntel Xeon Phiなどの特別なアーキテクチャは、そのようなプラットフォームを表しています。最後に、一般的な同時アプリケーションまたはアルゴリズムと並列実行を区別する必要があります。並列性は、計算の(おそらく関連性の高い)同時実行です。逆に、同時性は独立した実行プロセスの組み合わせです。
JavaScriptのマルチスレッド JavaScriptでは、同時プログラムの作成方法、つまりコールバック関数を使用する方法を既に知っています。この知識は、並列プログラムの作成に移行できるようになりました!独自の構造によれば、JavaScriptは、イベントループ(通常は反応器パターンに従う)によって媒介される単一のスレッドで実行されます。たとえば、これにより、(外部)リソースへの非同期リクエストを処理するための優れた抽象化が提供されます。また、以前に定義されたコールバックが常に同じ実行スレッドで常に起動されることを保証します。クロススレッドの例外、人種条件、またはスレッドに関連するその他の問題はありません。ただし、これはJavaScriptのSMTに近づくことはありません。ワーカーインターフェイスの導入により、エレガントなソリューションが見つかりました。主なアプリケーションの観点から、Webワーカーのコードは、同時に実行されるタスクと見なされる必要があります。このようにコミュニケーションも実施されます。メッセージAPIを使用します。これは、含まれるWebサイトからホストされたページまでの通信にも使用できます。たとえば、次のコードは、イニシエーターにメッセージを送信することにより、着信メッセージに応答します。 理論的には、Webワーカーは別のWebワーカーを生成することもできます。ただし、実際、ほとんどのブラウザはこれを禁止しています。したがって、Webワーカー間で通信する唯一の方法は、メインアプリケーションを使用することです。メッセージによる通信は同時に行われるため、非同期(非ブロッキング)通信のみが実行されます。最初は、これはプログラミングでは奇妙かもしれませんが、多くの利点をもたらします。最も重要なことは、私たちのコードには人種条件がないはずです! 2つのパラメーターを使用してシーケンスの開始と終了を表して、バックグラウンドで一連の素数を計算する簡単な例を見てみましょう。まず、次のコンテンツを含むprime.jsというファイルを作成します。
paralleljsは役立ちますか? これは、Paralleljsが出てくる場所です。これは、Webワーカーだけでなく、ある程度の利便性のために素晴らしいAPIを提供します。多くの補助ツールと非常に便利な抽象化が含まれています。最初に処理するデータを提供します。
上記のコードの問題は、計算が実際に並行していないことです。データの配列全体を一度に処理する単一の背景ワーカーのみを作成します。完全な配列を処理した後にのみ、結果を取得できます。より良い解決策は、並列インスタンスのマップ関数を使用することです。 前の例では、コアは非常に単純で、単純すぎる可能性があります。実際の例では、多くの操作と機能が関与します。必要な関数を使用して、インポートされた関数を含めることができます。 機能は、断片化された結果を単一の結果に集約するのに役立ちます。これは、すべてのサブレクストを知った後、サブルルトを収集し、特定の操作を実行するための便利な抽象化を提供します。 結論 Paralleljsは、Webワーカーを使用するときに発生する可能性のある問題を回避するためのエレガントな方法を提供します。さらに、いくつかの便利な抽象化とヘルパーを備えた素敵なAPIを取得します。将来、さらなる改善を統合できます。 JavaScriptでSMTを使用できることに加えて、ベクトル化を使用することもできます。サポートされている場合、Simd.jsは実行可能なアプローチのようです。一部の(できればそれほど遠くない)未来では、コンピューティングにGPUを使用することも有効なオプションになる場合があります。 node.jsには、cuda(並列コンピューティングアーキテクチャ)のラッパーがありますが、元のJavaScriptコードはまだ不可能です。それまでは、Paralleljsは、マルチコアCPUを利用して長期にわたるコンピューティングを処理するための最良の選択でした。あなたも? JavaScriptを使用して、最新のハードウェアの力を解き放ちますか? メソッドを使用して並行して処理できます。次に、結果を新しい配列で返します。
Paralleljsの メソッドに渡されます。たとえば、「var p = new paralled([1、2、3]); p.reduce( 'function(a、b){return a b;}');」 メソッドを使用して結果を単一の値に結合できます。
n
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));
}
かなりの作業がたくさんあります。特に迷惑なのは、別のファイルを使用することです。これは素晴らしい分離をもたらしますが、小さなタスクでは完全に冗長に見えます。幸いなことに、解決策があります。次のコードを検討してください: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
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は、マルチコアプロセッサを活用してデータ処理を並列化できるJavaScriptライブラリです。新しい並列オブジェクトを作成し、それに一連のデータを渡すことで機能します。このデータは、アレイ内の各アイテムに指定された関数を適用する.map()
paralleljsは、npm(node.jsパッケージマネージャー)を使用してインストールできます。端末にコマンド「npmインストールparalleljs」を実行するだけです。インストールが完了したら、「var parallel = require( 'paralleljs');」を使用してJavaScriptファイルに参照できます。
Paralleljsを使用すると、マルチコアプロセッサでデータ処理タスクを最大限に活用できます。これにより、大規模なデータセットの処理時間を大幅に高速化できます。また、並列化コードを簡単にするシンプルで直感的なAPIも提供します。
はい、パラレルJSをブラウザで使用できます。 ScriptタグとParallelJSファイルのURLを使用して、HTMLファイルに含めることができます。含まれると、node.jsのように並列オブジェクトを使用できます。
並行して
.map()
メソッドを使用する方法は? .map()
メソッドに渡されます。次に、結果を新しい配列で返します。たとえば、「var p = new parallem([1、2、3]); p.map( 'function(n){return n * 2;}');」 ]新しい配列。 .map()
メソッドは何ですか?
ParallelJSの.reduce()
.reduce()
.reduce()
並列jsでメソッドをリンクできますか? はい、並列jsのメソッドをリンクできます。たとえば、
メソッドを使用してデータを処理してから、.map()
.reduce()
パラレルJでエラーを処理する方法は? ParallelJSのエラーは、
メソッドを使用して処理できます。この方法は、処理中にエラーが発生した場合に呼び出される関数を受け入れます。エラーオブジェクトはこの関数に渡されます。 .catch()
他のJavaScriptライブラリとParalleljsを使用できますか? はい、Paralleljsは他のJavaScriptライブラリで使用できます。ただし、
メソッドを使用して、ワーカーコンテキストにライブラリを含めることを確認する必要があります。 .require()
Paralleljsはすべてのデータ処理タスクに適していますか? Paralleljsは大規模なデータセットの処理時間を大幅に高速化できますが、すべてのタスクに最適な選択肢ではない場合があります。小さなデータセットの場合、労働者の作成とデータの転送のオーバーヘッドは、並列化の利点を上回る可能性があります。特定のユースケースで平行JSをテストして、パフォーマンスの利点を提供するかどうかを確認することをお勧めします。
以上が平行javaScriptを使用したパラレルJavaScriptの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい

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

ホットトピック









