この設定でマルチスレッド、最終的にはどのように多くのスレッド?

I.はじめに

「あまりにも多くの接続の新聞は、どのように行うかのようにああ、深刻なオンラインサーバーのタイムアウトは、要求は、非常に遅いのですか?」フィードバックリトル友人。当社の技術の上司の一般的なアプローチで、接続およびスレッドプールの数が、大きなポイントを転送し、再起動した後、観察します。

私は、問題の原因を知らないので、このアプローチは、多くの場合、緊急対策、一時的なソリューションです。

深刻な誤解は、スレッドプールが小さすぎる、大きなポイントに設定されている要求が速く調整すること、があります。

スレッドプールのサイズについて通信するための小さなパートナーとの今日は、合理的なサイズを設定する方法をすべきですか?

第二に、問題

処理するための2つのタスク、ジョブA、Bの仕事がある場合

プログラム:スレッド実行タスクA及びBは、Aの実施後、Bが行う
同時に、タスクA及びBを実行するために2つのスレッドAとB:スキームIIを

どのプログラムを急いでしょうか?それは多くの人々は確かに速かった、AとBに確かに、オプションIIああ、マルチスレッドの並列処理タスクにお答えしますする必要があります。その権利はありますか?この質問に答える前に、櫛を振り返るために皆をもたらすために。

第三に、スレッドの実行

実行スレッドがCPUによって送出され、同時に、CPUが唯一のスレッドを実行する、我々はAおよびスレッドBが同時に実行スレッドを見ました。

同時に行われるこれらのタスクを感じるユーザーを可能にするために、オペレーティングシステムは、ラウンドロビン方式を使用して、時間の各タスクサービス一定量のCPUは、次に、状態の次のタスクがロードされ、現在のタスクの保存状態が継続します次のタスクにサービスを提供します。保存とリロードのタスクのステータスは、このプロセスは、コンテキストスイッチと呼ばれています。

コンテキストの切り替えプロセスは時間がかかり、今は少し友人が速いどのプログラムが何であるかを見て、上記の問題を見て?どのスレッドスイッチが存在しないため、いくつかの小さな友人は、プログラムを言うではありません。オプションIIは、これらの2つのスレッドがより多くの時間がかかる点となる前後に切り替える必要があります。

この時点でのリトル友人の心がマルチスレッド理由があるだろう、不思議ではないですか?まず急いで、その後見下ろします。

第四に、なぜ複数のスレッド

私たちの実際のビジネスの小さなパートナーを考えて、私たちはどのようなプロセスがありますか?

 

プロセス上の図:

図1において、第1のネットワーク要求を開始

2、Webサーバ解決要求

図3に示すように、データ取得要求をバックエンド・データベース

図4に示すように、データ取得、処理

図5に示すように、処理が戻ってユーザに結果

これは、我々は、ビジネス、従来の要求プロセスに対処する時間であり、我々は全体のプロセスを見てどのようなコンピュータ処理を必要とします。

1、ネットワーク要求----->ネットワークIO

2、解決要求-----> CPU

3、データベース要求----->ネットワークIO

4、MySQLのクエリデータ----->ディスクIO

5、MySQLはデータ----->ネットワークIOを返します。

図6に示すように、データ処理-----> CPU

図7に示すように、データがユーザに返される----->ネットワークIO

このことについて話して、少しの友人は、私たちが唯一のCPUコンピューティングだけでなく、非常に時間がかかり、ネットワークとディスクIO IOプロセスを伴わない実際のビジネスでは、混乱せずに感じていません。全体のプロセスフロー図のスレッドが実際には2つのCPUノードを関与されている場合は、他のノードはIO処理され、IO処理時間をやってスレッド、アイドルアウトのCPUではなく、CPU使用率高いです。

小さなパートナーは今、それはCPUの使用率を向上させるためには、マルチスレッドの使用にそれを知っています。

第五に、QPS / TPSを高めるために、

どのようにシステムのパフォーマンスを測定するために、主要な指標システム(QPS / TPS)

QPS / TPS:1秒あたりの要求数/トランザクション処理することができます

同時の数:システム/取引しながら、処理されたリクエストの数

処理は、要求/トランザクションの平均長さが必要とされている場合:応答時間

QPS / TPS = /同時応答時間の数

上記の式は、同時の高い数、QPSより大きなを表し、多くの人々は、このように序文の先頭に上昇を与えて、同時多数のもQPSを強化する、そのスレッド・プールを上げますが、ほとんどの人が言いました誤解。

実際にはQPS親切に応答時間が大きくなるの応答時間に反比例する、小さい方がQPSになります。

同時ターンアップの数が、QPSを強化しますが、スレッドの数は、応答時間に影響を与えることができ、なぜなら上記の後、スレッド数にそれを設定する方法を、私たちコンテキストスイッチの問題を言及しましたか?

第六に、スレッド数を設定する方法

どのようにスレッドを割り当てていますか?私たちは、式を提供します。

スレッド=((スレッド、スレッドCPU時間の待ち時間+)/スレッドCPU)の最適数CPUの数*

フロントデスクでは、淘宝網システムの最適化の練習の記事を見て前に備考この式はまた、当然のことながら、前任者を共有し、そして上記の式は非常に似ていますが、あそこのCPUの数が、彼らは、参照だけのために、上記の式より洗練されています。その後、しかし、何があっ式、最終的に本番環境を実行した後、調整を最適化します。

私たちは、上記の作業を続け、当社のサーバーのCPUのコア数4核、時間のかかるタスクスレッドのCPUは20msの、スレッド待機中である(ネットワークIOは、ディスクIO)が80ミリ秒を要し、その最適な数のスレッド:( + 20 80)/ 20 * 4 = 20。これは、20件のスレッドの数最高のセットです。

このことから、上記の式を描き、スレッドの待機時間も大きく、セットアップに必要なスレッドの数も大きく、これは上記の我々の分析によくフィットし、CPUの使用率を向上させることができます。これは、別の観点から、スレッドの数は、私たち自身のビジネスに応じて、どのくらいを設定し、妥当な値を設定し、自分自身のストレステストを行うことと言います。

七、従来の基準

上記の場合とは異なり、一つのスレッド・プールで一緒にビジネスの多くは、実際にあまりにも多くの事業で、比較的簡単であるため、その後、我々は、小さなパートナーを聞いてきます、どのようにそれを設定するには?これは、ストレステストを調整しようとしています。しかし、私たちの先人がベースの値をまとめるために私たちを支援してきました(最終的には自己調整の操作に依存)

図1に示すように、CPU集約型:CPUコアの数やCPUコアの1つの+ 2 *番号:動作メモリ処理オペレーション、スレッドの数は、一般的に設定されています。核番号4、一般的なセット5または8

図2に示すように、IO集中型: - 、コア4の数、一般設定40 CPU監査/(0.9 1):ファイル操作、ネットワーク操作、データベース操作は、スレッドは、一般的に設定されています

八、要約

今日は、エラーのいくつかの小さなパートナーのサイズ設定スレッド数を導入しました。ここでは、失礼の前に、あなたはとても遅い、システムのボトルネックは時間のかかるボトルネックを軽減するために、任意の場所で発生する理由を分析してみてくださいとは違って、理解するために更新されているスレッドされていない少しの友人について話しました。

少しの友人をお勧めして、見た目のRedis、nginxのを取る;彼らはとても速いだろう、なぜ?実際には、この記事や知識の点が共通しています。

 

おすすめ

転載: www.cnblogs.com/javalyy/p/10930330.html