シナリオ:
ワーカー スレッドに入る前に、いくつかのシナリオを考えてみましょう...
クライアントが、変更が必要な、またはバックグラウンドでの数千のデータ ポイントの処理が必要な大きなファイルをサーバーにアップロードするとします。サーバーがこのタスクが完了するまで待機すると、クライアントは待機したままになり、他の機能を探索できなくなります。クライアントが他に何もできずに 5 分間待たなければならない場合を想像してください。これはイライラするばかりで、ユーザーフレンドリーとは程遠いでしょう。
プロフィール画像をアップロードする別の状況を考えてみましょう。処理、変換、データベースへの保存に長い時間がかかります。この間、サーバーによって他のタスクの実行が妨げられると、ユーザー エクスペリエンスが大幅に低下します。
最初のケースでは、ファイルの処理中にサーバーが他の機能を探索できるようにした方が良いと思いませんか?この方法では (サーバーがブロックしないため) 待つ必要がなく、よりスムーズなエクスペリエンスが得られます。
2 番目のケースでは、画像処理がバックグラウンドで行われ、待たずに他の機能を使用し続けることができる場合はどうなるでしょうか?
解決策:
では、これらのシナリオでシステムのパフォーマンスを最適化する効果的な方法は何でしょうか?いくつかのアプローチがありますが、ワーカー スレッドの使用は優れた解決策です。ワーカー スレッドは Node.js バージョン 10 で導入され、CPU 集中型のタスクを並行して実行し、メイン CPU の負荷を軽減するのに特に役立ちます。
ワーカー スレッドはバックグラウンドで動作し、メイン スレッドをブロックすることなく集中的な計算を処理する別のスレッドを作成するため、サーバーは他のタスクに対する応答性を維持できます。 JavaScript は伝統的にシングルスレッド言語であり、Node.js はシングルスレッド環境で動作しますが、ワーカー スレッドは操作を複数のスレッドに分散することでマルチスレッドを可能にします。この並列実行により、リソースの使用が最適化され、処理時間が大幅に短縮されます。
worker_thread の実装:
今日は、デフォルトのパッケージ worker_threads を使用して単純な Nodejs アプリケーションを実装します。まず、単純な get リクエストを実行する Express サーバーを作成します。
まずプロジェクトを初期化します:
$ npm init -y
Express モジュールとノードモンをインストールします:
$ npm i Express ノードモン
ポート 3000 で実行される単純な Nodejs サーバーを作成します。
Import express from ‘express’; const app = express(); const port = 3000; // Basic endpoint to test server app.get(‘/’, (req, res) => { res.send(‘Hello World!’); }); app.listen(port, () => console.log(`Server running on port ${port}`));
ここでは、ポート 3000 で実行されるサーバーを作成しました。
実行するには、package.json ファイルを変更しましょう。
ES6 モジュールを取得するには、以下のように type をモジュールとして追加します。スクリプト部分も以下のように変更します。
{ "name": "worker_express", "version": "1.0.0", "description": "", "main": "index.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", "dev": "nodemon index.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "dotenv": "^16.4.5", "express": "^4.19.2", "nodemon": "^3.1.4" } }
次に、nodemon を使用してアプリケーションを開発モードとして実行しましょう:
$ npm run dev
「ポート 3000 でサーバーが実行されています」というメッセージが表示されます。次に、localhost:3000 に移動すると、Hello World! が表示されます。これまでのところ、単純な Nodejs Express サーバーを作成しただけです。
次に、service.js という名前の別のファイルを作成しましょう
ここで、n 番目のフィボナッチ数列を見つけるフィボナッチ数列関数を作成できます。
// service.js function fibonacci(n) { if (n <p>次に、別の API エンドポイントをindex.js ファイルに追加し、service.js ファイルから fibonacci 関数を呼び出してみましょう。例として40番目のフィボナッチ数を計算してみます。<br> </p> <pre class="brush:php;toolbar:false">import fibonacci from "./service.js"; // Fibonacci endpoint app.get('/fibonacci', (req, res) => { fibonacci(40) res.send('fibonacci called'); })
URL http://localhost:3000/fibonacci にアクセスすると、少し遅れて待たされることがわかります。遅延時間は演算に依存します。
関数にコメントを付けて再試行すると、所要時間がミリ秒程度に短縮されることがわかります。
この場合、時間がかかり、パフォーマンスが低下する他の重い操作を実行する必要がある可能性があります。
この場合、worker_threads モジュールを使用できます。このモジュールは、バージョン 10 以降、Node.js でデフォルトで使用可能になっています。次に、worker_threads を適用するようにコードを変更し、その効果を確認してみましょう。
ノード js のデフォルト パッケージである worker_thread からワーカーをインポートします。
import { Worker } from "worker_threads";
次に、API エンドポイントを以下のように変更します。
// Endpoint using worker thread for CPU-intensive task app.get('/fibonacci', (req, res) => { const worker = new Worker('./service.js', {workerData: 40}); // Handle messages from worker thread worker.on('message', (resolve) => console.log(resolve)); res.send('fibonacci called'); })
ここでは、ワーカー インスタンスを作成し、最初の引数としてファイル名 service.js を設定します。また、2 番目の引数は、workerData を通じてパラメーターを渡します。 workerData パラメータを 40 の代わりに他のデータに変更できます。
worker.on(‘message’, ….) This sets up an event listener on the worker for the ‘message’ event. The message event is emitted by the worker when it sends data back to the main thread using parentrPort.postMessage(...).
(resolve) => console.log(resolve) this is a callback function that will be executed when the worker sends back the data after operation. The received message(data) is passed to this function as the resolve parameter.
Now let’s update our service.js file.
import { workerData, parentPort } from 'worker_threads'; // Function to compute Fibonacci sequence function fibonacci(n) { if (n <p>Here, we import workerData and parentPort, which allow us to receive the data sent through workerData and return the result via the postMessage method of parentPort, both imported from worker_threads.</p> <p><strong>Test the Setup</strong>:<br> Now, send a request to http://localhost:3000/fibonacci and notice that the server no longer blocks the main thread. The time-consuming operation occurs in the background on a separate thread, significantly reducing the response time and improving user experience.</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172501398654385.png?x-oss-process=image/resize,p_40" class="lazy" alt="Enhance Node.js Server Performance with Worker Threads"></p> <p>Here is the source code in github.</p>
以上がワーカー スレッドを使用して Node.js サーバーのパフォーマンスを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
