I.背景
他の理由(IO操作)1.生成ブロッキング:頻繁な要求は、データベースを読み取り、これらが発生する可能性がブロッキング環状IO操作です。たとえば:ポストhttpリクエストは別のスレッドになりたいです。タスクはrun()メソッドのコード・ロジックとして理解することができます。
二、CPU集約型
CPU集約手段タスクが障害なく、多くの計算を必要とし、フルスピードでCPUの実行。
CPUに負荷をかけ真のマルチコアCPU上の唯一の可能性が高い(複数のスレッドによって)加速されるタスク、およびシングルコアのCPU、マルチスレッドあなたは、いくつかのシミュレーションを開くかどうか、タスクが総CPU動作のため、加速することができませんこれらの能力。
三、IO集約型
IO集約型の、ある、タスクは混雑がたくさんあること、IOの多くを必要とします。シングルスレッドで実行されているIO集約型のタスクは、多くの無駄につながる待ちで無駄なCPUパワーを。マルチスレッドプログラムでIO集約型のタスクを使用して大幅に実行を加速することができ、リアルタイムのシングルコアCPUで、この加速度は主にブロック時間の使用が浪費されています。
そして、スレッドプールにスレッドプールのサイズを設定する方法を、左の尾を探ります。
スレッドプールサイズの合理的な配分に、最初のタスクの特性を分析しなければならない、それは次のような視点から分析することができます。
1.タスクの性質:CPU集約型のタスク、IO集約型のタスク、ハイブリッドミッション。
2.優先度のタスク:高、中、低。
3.タスク実行時間:ロング、セミロング、ショート。
4.依存タスク:このようなデータベースへのアクセスなど、他のシステムリソースに依存するかどうか。
タスクの性質は、実行するスレッドプールの異なるサイズの異なる場合があります。
タスクの異なる性質のために、CPU集約型のタスクは、このようなCPU +1の数を設定するには、スレッドの数として、小型のスレッドとして設定する必要がありますされ、IO集約型のタスクは、IO操作など、多くのスレッドがCPUを占有していないように設定する必要がありますそのような1ダブルナンバーは、ハイブリッドミッションのために、あなたが分割することができればCPU構成、IO集約型とCPU集中処理に分割などのスレッドの数を増やす必要があり、CPUが引退し、座らせてはいけない、それぞれ、2ことを提供処理時間は大きな違いがある場合は、時間のランニングは、それを分割する必要はありません、ほぼ同じです。
タスクは、このようなデータベース接続の結果に依存タスクなど、他のシステムリソースに依存関係が、返された場合は、この時間長い待ち時間が長くCPUのアイドル時間、大きいスレッドの数はよりよくするために設定する必要がありますCPUを使用しました。
もちろん、具体的かつ合理的な値のスレッドプールサイズのうち、試行比較的多く、以前の法律の単なる要約以上のものを得るために、システムの実際の状況の組み合わせを必要とします。
スレッドの最適数=((スレッド、スレッドCPU時間の待ち時間+)/スレッドCPU)* CPUの数
次いで、推定値は、上記式に基づいて得られ、そのような平均CPU時間などの各スレッドは0.5秒であり、スレッドは、1.5秒に(例えばIOなどの非CPU時間)の時間を待って、CPUコアは8:((0.5 + 1.5)/ 0.5)* 8 = 32。この式は、さらにに変換されます。
スレッド=最適数(スレッドCPU待ち時間率+ 1スレッド)* CPUの数
結論を引き出すことができます:
スレッドは、より高い割合、スレッドへのより多くの必要性を待ちます。CPU時間の割合が高いスレッド、少数のスレッドを必要としています。
CPUとIO集約型のタスクの数は、基本的には上記式スレッドの前に設定しました。
CPU集約型の場合は、各スレッドがでタスクを実行できるように、タスクは、小さなスレッドの数、そしておそらくかなりの数のCPUコアのマシンを構成するには
IO集約型は、ときに、スレッドのほとんどがブロックされている、あなたはマルチスレッドカウント、2 * CPUの監査を設定する必要があります
オペレーティングシステム名説明:
他の人がI / Oは、ほとんどの時間を費やした上で待っている間、いくつかの進展は、コンピュータ上のほとんどの時間を費やしてきました
前者はと呼ばれる計算集約的(CPU集約型)コンピュータが結合した、I / Oを集中的に呼び出され、I / Oバウンド。
第四に、の終わり
常に信念を貫きます!!!