ホームページ > バックエンド開発 > Golang > Go でマルチスレッドリクエストが発生し、高い RPS が得られない

Go でマルチスレッドリクエストが発生し、高い RPS が得られない

WBOY
リリース: 2024-02-09 16:48:10
転載
1004 人が閲覧しました

go 中的多线程请求并且没有获得高 RPS

php エディターの Xigua は、Go 言語を使用してマルチスレッド リクエストを行う場合、高い RPS (Request Per Second) 速度を実現できない場合があることに気付きました。 Go 言語は同時処理に優れていますが、場合によっては、マルチスレッドのリクエストがあまり効率的ではありません。これは、ネットワーク遅延、リソースの競合などが原因である可能性があります。この記事では、この問題を調査し、Go 言語でのマルチスレッド リクエストの RPS を向上させるために考えられる解決策をいくつか紹介します。

質問の内容

サーバーをテストするためにマルチスレッド クライアントを作成しようとしています。 2 つのゴルーチンを使用すると、すべて問題なく、50,000 RPS が得られ、CPU 負荷は正常ですが、2 つを超えるゴルーチンを作成すると、RPS は 3,000 に低下しますが、CPU 負荷が超過します。ただし、クライアント コードを複数回実行すると (同じコードを 3 台のコンソールで同時に実行するなど)、80,000 RPS ほどの RPS が得られます。

これは私のクライアントコードです

リーリー

これは私のサーバー側のコードです

リーリー

最初、go はすべてのクライアント接続に 1 つのポートを使用しているのではないかと思いましたが、netstat で確認したところ、複数のポートを使用していました。検索してみましたが、適切な答えが見つかりませんでした

sync.mutex を試してみました:

リーリー

上記の変更により、13,000 rps が得られ、CPU 負荷は正常でしたが、単に十分ではありませんでした。

回避策

リクエストを 1 つのホストにのみ送信しているため、httpトランスポートのデフォルト値は適切ではありません。状況に応じてパラメータを手動で設定することをお勧めします:

リーリー

詳細については、こちらをご覧ください。

以上がGo でマルチスレッドリクエストが発生し、高い RPS が得られないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート