製品の品質を落とさずに開発チームを拡大する方法
開発チームの規模を拡大中ですか?製品の品質を犠牲にすることなく成長する方法を学びましょう。このガイドでは、スケールする時期、チーム構成、採用、リーダーシップ、ツールなどの兆候に加え、The Codestがどのように...
「イベントループをブロックしてはいけない...」-おそらくこの文章を何度も聞いたことがあるでしょう。しかし、ブロックを控えるべき2つ目の「もの」があります。放置しておくと、アプリケーションのパフォーマンスやセキュリティにまで大きな影響を及ぼしかねません。
主な注意点:以下の2種類のスレッドがある。 Node.js:メインスレッド イベントループそして 労働者プール (スレッドプール) - これはスレッドのプールである。
libuvに感謝.それぞれの仕事は異なる。最初のものの目的は、ノンブロッキングI/Oオペレーションを処理することであり、2番目のものはCPUに負荷のかかる作業とブロッキングI/Oを担当する。
But what is a thread and how it’s different than a process? There are several differences, but the most important one for us is how the memory is allocated to them. You can think about a process like about an application. Inside each process, there is a chunk of memory dedicated just for this process. So, one process doesn`t have access to the memory of the second one, and this property ensures high security. To establish communication between them, we must do some work. Threads are different. Threads runs inside a process and share the same memory so there is no problem at all with threads sharing data.
しかし、ある問題が問題を引き起こす。それはレースコンディションと呼ばれるものだ。スレッドは同時に実行される可能性があり、どちらが先に終了するかをどうやって知るのだろうか?最初に実行したときは最初の操作が先に終了し、次に実行したときは逆に2番目の操作が最初の操作より先に終了するということが起こるかもしれない。このような状況下で、書き込み/読み取り操作を行うことを想像してみてほしい!悪夢だ!正しい コード マルチスレッド環境で
また、マルチスレッド言語は、リクエストごとに別々のスレッドを作成するため、メモリのオーバーヘッドが大きい。
このような問題に対処するには?代わりにシングルスレッドを使う!そしてそれが ノード を提供する。
として JavaScript 開発者 をご覧になることをお勧めする。 映画
その中で、バート・ベルダーはイベント・ループの概念について明確に説明している。上の図は彼のプレゼンテーションからの引用である。また、もしこれらの用語をまったく知らないのであれば、どちらも ノード とLibuvには優れた文書🙂がある。
で JavaScript開発 業界ではこう言われている。 ノード がシングルスレッドでノンブロッキングであれば、同じリソースでマルチスレッドのソリューションよりも高い同時実行性を達成できる。それは事実だが、見かけほど美しく簡単ではない。
以来 Node.js がシングルスレッド(JS部分)である場合、CPU負荷の高いタスクは、特定のタスクが完了するまで、進行中のすべてのリクエストをブロックします。ですから Node.js その中にブロッキング命令があるからといって、すべてのリクエストをブロックすることができる。ブロッキング・コードとは、終了までに数ミリ秒以上かかることを意味する。しかし、長い応答時間とブロッキングを混同しないでください。データベースからのレスポンスには非常に長い時間がかかりますが、あなたのプロセス(アプリケーション)がブロックされるわけではありません。
ブロッキング・メソッドは同期的に実行され、ノンブロッキング・メソッドは非同期的に実行される。
イベントループをスローダウン(ブロック)するには?
その場合、ワーカー・プールはスレッドのプールを使用するので、スレッドもブロックすることは可能ですか?残念ながら、可能です。 ノード は哲学に基づいている。 一つのスレッドが多くのクライアントに対応する。 特定のWorkerが実行するタスクが非常に複雑で、終了までに時間がかかるとしよう。その結果、Workerはブロックされ、その命令が実行されるまで、他の保留中のタスクの実行には使えなくなります。もうお分かりだと思いますが、パフォーマンスに影響する可能性があります。タスク・パーティショニングを使用することで、タスク時間のばらつきを最小限に抑え、このような問題を防ぐことができます。
ブロッキングを避けるのは確かだ。もし可能であれば、標準ライブラリAPIの非同期バージョンを常に選択すること。そうしないと、アプリを実行した後、クライアントにいくつかの問題が発生する可能性がある。スループットの低下から始まり、最後には完全な離脱に至る。
続きを読む