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 サイトの他の関連記事を参照してください。