将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察
The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...
「イベントループをブロックしてはいけない...」-おそらくこの文章を何度も聞いたことがあるでしょう。しかし、ブロックを控えるべき2つ目の「もの」があります。放置しておくと、アプリケーションのパフォーマンスやセキュリティにまで大きな影響を及ぼしかねません。
主な注意点:以下の2種類のスレッドがある。 Node.js:メインスレッド イベントループそして 労働者プール (スレッドプール) - これはスレッドのプールである。
libuvに感謝.それぞれの仕事は異なる。最初のものの目的は、ノンブロッキングI/Oオペレーションを処理することであり、2番目のものはCPUに負荷のかかる作業とブロッキングI/Oを担当する。
しかし、スレッドとは何か、プロセスとどう違うのか。いくつかの違いがあるが、私たちにとって最も重要なのは、どのようにメモリが割り当てられるかということだ。プロセスをアプリケーションのように考えることができる。各プロセスの内部には、そのプロセス専用のメモリの塊があります。そのため、あるプロセスが別のプロセスのメモリにアクセスすることはありません。両プロセス間の通信を確立するには、いくつかの作業をしなければならない。スレッドは違います。スレッドはプロセス内部で実行され、同じメモリーを共有するので、スレッドがデータを共有してもまったく問題はない。
しかし、ある問題が問題を引き起こす。それはレースコンディションと呼ばれるものだ。スレッドは同時に実行される可能性があり、どちらが先に終了するかをどうやって知るのだろうか?最初に実行したときは最初の操作が先に終了し、次に実行したときは逆に2番目の操作が最初の操作より先に終了するということが起こるかもしれない。このような状況下で、書き込み/読み取り操作を行うことを想像してみてほしい!悪夢だ!正しい コード マルチスレッド環境で
また、マルチスレッド言語は、リクエストごとに別々のスレッドを作成するため、メモリのオーバーヘッドが大きい。
このような問題に対処するには?代わりにシングルスレッドを使う!そしてそれが ノード を提供する。
として JavaScript 開発者 をご覧になることをお勧めする。 映画
その中で、バート・ベルダーはイベント・ループの概念について明確に説明している。上の図は彼のプレゼンテーションからの引用である。また、もしこれらの用語をまったく知らないのであれば、どちらも ノード とLibuvには優れた文書🙂がある。
で JavaScript開発 業界ではこう言われている。 ノード がシングルスレッドでノンブロッキングであれば、同じリソースでマルチスレッドのソリューションよりも高い同時実行性を達成できる。それは事実だが、見かけほど美しく簡単ではない。
以来 Node.js がシングルスレッド(JS部分)である場合、CPU負荷の高いタスクは、特定のタスクが完了するまで、進行中のすべてのリクエストをブロックします。ですから Node.js その中にブロッキング命令があるからといって、すべてのリクエストをブロックすることができる。ブロッキング・コードとは、終了までに数ミリ秒以上かかることを意味する。しかし、長い応答時間とブロッキングを混同しないでください。データベースからのレスポンスには非常に長い時間がかかりますが、あなたのプロセス(アプリケーション)がブロックされるわけではありません。
ブロッキング・メソッドは同期的に実行され、ノンブロッキング・メソッドは非同期的に実行される。
イベントループをスローダウン(ブロック)するには?
その場合、ワーカー・プールはスレッドのプールを使用するので、スレッドもブロックすることは可能ですか?残念ながら、可能です。 ノード は哲学に基づいている。 一つのスレッドが多くのクライアントに対応する。
特定のWorkerが実行するタスクが非常に複雑で、終了までに時間がかかるとしよう。その結果、Workerはブロックされ、その命令が実行されるまで、他の保留中のタスクの実行には使えなくなります。もうお分かりだと思いますが、パフォーマンスに影響する可能性があります。タスク・パーティショニングを使用することで、タスク時間のばらつきを最小限に抑え、このような問題を防ぐことができます。
ブロッキングを避けるのは確かだ。もし可能であれば、標準ライブラリAPIの非同期バージョンを常に選択すること。そうしないと、アプリを実行した後、クライアントにいくつかの問題が発生する可能性がある。スループットの低下から始まり、最後には完全な離脱に至る。
続きを読む