2

PHP/Python/Ruby などの他の言語ではなく、タスク キュー ワーカーに Node.js を使用するメリットはありますか?

大量の電子メールを送信するなどの単純なタスク キュー タスクについて Redis を学習したいのですが、接続の確立などをユーザーに待たせたくありません。

質問は次のとおりです: node.js の非同期性はこのシナリオで役立ちますか、それとも役に立たないのでしょうか?

PS ノードは、効率的な V8 エンジンのおかげで、メモリ消費と計算においてこの言語のどの言語よりも高速であることを知っています。この分野で勝つことは可能でしょうか?

4

2 に答える 2

1

それは、あなたが何に精通しているか、また、実行しようとしている作業をどの言語がサポートしているかによって大きく異なります。たとえば、PDF ファイルをレンダリングしている場合、使い慣れている言語のうち、最適な PDF ライブラリを備えているのはどれですか?

ワーカーには、作業が複数のワーカーにファンアウトされる方法により、同期的なブロック コードを実行できるという利点があります。非同期ワーカーを使用するということは、理論的には、各ワーカー プロセスがシングル スレッドのブロッキングに相当するものよりも多くの作業を実行できることを意味します。

ただし、スレッド化をサポートする言語では、この利点はわずかです。Python と Ruby は両方とも、同期コードの複数のブロックを並行して実行する方法であるスレッド化をサポートしています。

大量の電子メール アプリケーション用の分散ワーカー キューを構築するとき、そのほとんどをEventMachineライブラリを使用して非同期ノンブロッキング Ruby に実装しました。Redis は、冪等性を確保するためのバッキング ストアとして使用されます。

すべてのライブラリが非ブロックであることを確認する必要があるため、適切な非同期のイベント駆動型コードを記述することは困難でした。そうしないと、ワーカー プロセスがジャムする可能性があります。これは、スレッド化を行うときにスレッドセーフなライブラリを見つけるのと同じです。

ノードは多くのことを非常にうまく実行できますが、スレッド化はその 1 つではありません。幸いなことに、ほとんどの Node ライブラリはデフォルトでノンブロッキングであるため、互換性はあまり問題になりません。ほとんどの Python および Ruby ライブラリについて同じことは言えませんが、これらの大部分は少なくともスレッドセーフです。

結局のところ、それはあなたが最も快適なものに依存します。分散ワーカー システムには複数の異なる言語が含まれている可能性があるため、必ずしも特定の言語に縛られるとは限りません。

于 2013-05-09T15:29:25.597 に答える