The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2021-07-20
ソフトウェア開発

ママまたスレッドをブロックされた

The Codest

パヴェル・リブチンスキ

Software Engineer

「イベントループをブロックしてはいけない...」-おそらくこの文章を何度も聞いたことがあるでしょう。しかし、ブロックを控えるべき2つ目の「もの」があります。放置しておくと、アプリケーションのパフォーマンスやセキュリティにまで大きな影響を及ぼしかねません。

スレッド

主な注意点:以下の2種類のスレッドがある。 Node.js:メインスレッド イベントループそして 労働者プール (スレッドプール) - これはスレッドのプールである。
libuvに感謝.それぞれの仕事は異なる。最初のものの目的は、ノンブロッキングI/Oオペレーションを処理することであり、2番目のものはCPUに負荷のかかる作業とブロッキングI/Oを担当する。

libuvのダイアグラム

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 その中にブロッキング命令があるからといって、すべてのリクエストをブロックすることができる。ブロッキング・コードとは、終了までに数ミリ秒以上かかることを意味する。しかし、長い応答時間とブロッキングを混同しないでください。データベースからのレスポンスには非常に長い時間がかかりますが、あなたのプロセス(アプリケーション)がブロックされるわけではありません。

ブロッキング・メソッドは同期的に実行され、ノンブロッキング・メソッドは非同期的に実行される。

イベントループをスローダウン(ブロック)するには?

  • 脆弱な正規表現 - 脆弱な正規表現とは、正規表現エンジンが指数関数的な時間を要する可能性のあるものです。 これ,
  • 大きなオブジェクトに対するJSON操作、
  • の同期APIを使用する。 ノード Node.js標準ライブラリのすべてのI/Oメソッドは、非同期バージョンも提供しています、
  • 同期無限ループのような他のプログラミングエラー。

その場合、ワーカー・プールはスレッドのプールを使用するので、スレッドもブロックすることは可能ですか?残念ながら、可能です。 ノード は哲学に基づいている。 一つのスレッドが多くのクライアントに対応する。 特定のWorkerが実行するタスクが非常に複雑で、終了までに時間がかかるとしよう。その結果、Workerはブロックされ、その命令が実行されるまで、他の保留中のタスクの実行には使えなくなります。もうお分かりだと思いますが、パフォーマンスに影響する可能性があります。タスク・パーティショニングを使用することで、タスク時間のばらつきを最小限に抑え、このような問題を防ぐことができます。

結論

ブロッキングを避けるのは確かだ。もし可能であれば、標準ライブラリAPIの非同期バージョンを常に選択すること。そうしないと、アプリを実行した後、クライアントにいくつかの問題が発生する可能性がある。スループットの低下から始まり、最後には完全な離脱に至る。

続きを読む

おそらく)Typescriptを使うべき理由

悪いコーディング・プラクティスでプロジェクトを潰さないためには?

NextJSのデータフェッチ戦略

関連記事

上昇する矢印とコスト効率や節約を象徴する金貨が描かれた減少する棒グラフの抽象的なイラスト。左上にはThe Codestのロゴと、ライトグレーの背景に "In Code We Trust "のスローガン。
ソフトウェア開発

製品の品質を落とさずに開発チームを拡大する方法

開発チームの規模を拡大中ですか?製品の品質を犠牲にすることなく成長する方法を学びましょう。このガイドでは、スケールする時期、チーム構成、採用、リーダーシップ、ツールなどの兆候に加え、The Codestがどのように...

ザ・コデスト
ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese