この記事は抜粋された陳朔の先生は、マルチスレッドサーバー側のプログラミングをLinuxに
1.一般的なシングルスレッドのサーバープログラミングモデル
非ブロッキング+ IO多重化モデル、すなわち原子炉モデル。
原子炉モデルがありますイベント駆動型モデル、キューにイベント内の1つの以上のプロデューサ、一つ以上の入力ソースと、同様に、プロデューサとコンシューマモデルに同時、およびポーリング・キューからイベントを処理するための1つまたは複数のアクティブコンシューマ。
原子炉ベースのイベントコールバック関数は、それ以外の場合は、他の接続の正常な動作に影響を与えるだろう、ノンブロッキングでなければなりません。
例:
イベントは、ソケット読みやすいが、この新しいセクションの検査とエラーにチェックインのプロトコル・スタックを発生する場合は、このセクションを破棄し、それがブロックされている場合、読み込むためのデータを全く読まない呼び出して、この時間は、それが読み取りを詰まらせます。
2.マルチスレッド・サーバーの一般的なプログラミングモデル
スレッド+スレッドプールごとに1つのループこのモードはサポートするために品質ベースの原子炉のライブラリが必要です。
-
スレッドごとにループ
各スレッドは、IOイベントループ(非ブロッキング+ IOを有するプログラム多重化) 又は反応器を呼び出します -
スレッドプールは
、マルチスレッド処理形態である、プロセスがキューにタスクを追加し、タスクを開始するためのスレッドを作成します。スレッドが作成されたときに、自動的にこれらのタスクを開始します。スレッドプールのスレッドは、バックグラウンドスレッドです。各スレッドは、優先実行をデフォルトにデフォルト・スタック・サイズを使用し、マルチスレッド単位です。
3.マルチスレッド・サーバー・アプリケーションのアプリケーション
選択 複数のシングルスレッドのプロセスを実行します このモデル
- シングルスレッドのアプリケーションでなければなりません
フォークプログラムを使用するかもしれない、唯一の単一のスレッドがフォークすることができます
長所:システム奪うため、過剰なコンピューティングリソースを避ける
短所:優先順位を設定することはできません
- マルチスレッドのシナリオに適しました
- 共有データを変更することができます
- 異機種間サービスを提供する(優先度差)
4.スレッドのカテゴリー
スレッドは、大きく3つのに分類することができるマルチスレッド・サーバー・プログラム。
- IOスレッド
これらのスレッドのメインループは、選択/世論調査/イベントがepoll_waitシステムコールで待機してブロックし、IO多重化です - 計算スレッド
- サードパーティのライブラリを使用スレッド
実施例5の説明
- Linuxはどのように多くのスレッドを同時に起動することができますか?
デフォルトのスレッドスタックサイズを持つとプロセス空間。 - マルチスレッド同時実行にそれを改善することができますか?
同時接続のマルチスレッド数を向上させることができない。
「接続スレッドA」(1)の場合、関連するスレッドへの同時接続の数は、同時に、それは限られている、上記開始。
(2)「スレッドごとに1つのループ」、単一のイベントループ処理1万長い接続は珍しいことではありません場合。(限りメインスレッドの到着を処理するために割り当てられたコールバック関数への接続を確立した後、接続を待機するように) - マルチスレッドはスループットにそれを改善することができますか?
計算集約型のサービスのために、マルチスレッドでは、スループットを向上させることはできません。 - どのようにマルチスレッドプログラムIOと計算のオーバーラップは、待ち時間を短縮するには?
基本的な考え方は、(通常、読者に左)IO操作によってにありますBlockingQueueの 他のスレッドに処理します。
概要
- サーバ側のプログラミング作業セット(メモリサイズにアクセスするための要求に応じてサービスプログラム)が大きい場合、次いで、マルチスレッド・プロセスを使用し、スワップアウトCPUのキャッシュを防止する、性能に影響を与え、そうでない場合は、シングルスレッドのマルチプロセスを使用して、シングルスレッドプログラミングの利便性を享受。
- CPU時間の負荷を軽減することができないスレッドを低減することができません。
- マルチスレッドサーバー側のプログラミングは、スレッド+非ブロックモードごとに1つのスレッドを取り、原子炉+スレッドプールモデルをお勧めします。
- 別IOスレッドとスレッドコンピューティングは、BlockingQueueの時間は、スレッドプールに配置され、に対処するため、「コンピューティング」を必要と「計算」。