4種類のIOモデルJava関連
1.同期ブロッキングIO
典型的なものはソケットTCPの例です
サーバーとクライアントの通信
このようなもの
以下は擬似コードです
// server端 阻塞自己直到收到消息
// 没收到 线程被挂起
msg = server.accept()
// 收到再执行
handler(msg)
2.同期非ブロッキングIO
// server端
while(msg=server.accpet() !=null){
handle(msg)
}
ブロッキングIOとは異なり、毎回戻り値が必要です。
3.多重化されたIO
これは、最も使用されるIOモデルである必要があります。多くの高性能IOフレームワークは、多重化されたIOに基づいています
ネティのように
nioは多重化IOの基礎です
多重化には2つのモードがあります:ProactorモードとReactorモード
Proactorは非同期IOに使用されます
Reactorは同期IOに使用されます
-
リアクターモード
人気の理解は
お母さん(クライアント)欲しい私(サーバー)正午調理
(イベント/またはIO要求)、でも今はゲームをしたいのですが(時間を待ってご飯を炊きたくありません)
教えて小愛(イベント登録)
それまでに小藍目覚まし時計(条件)料理をすることを思い出して(Callbakcが私に電話をかけ直す)
その後、私は調理(IOを完了する準備ができています)イベントは「自分の料理を作りたい」と登録されました
コールバックの結果は、「これは実行できます」です。
-
プロクターモード
人気の理解は
お母さん(クライアント)欲しい私(サーバー)正午調理(イベント/またはIO要求)、
でも今はゲームをしたいのですが(時間を待ってご飯を炊きたくありません)
教えて小愛たぶん(イベントセパレーター)料理したいご飯1杯と水1.5杯(データサイズとバッファー領域)、Xiao Aiの学生は直接自動炊飯器(操作系)ご飯を入れて水を加えます。炊飯器の準備ができました、Xiao Aiはご飯を知っています調理済み(IO完了)。思い出させる(食べられることを通知してください)
その後、私はそれを手に入れました(終了したイベント)
イベントの登録は「とにかくごはんを炊いてほしい。どうでもいい」
コールバックの結果は、「これはご飯1杯に対して1.5杯の水を必要とするために行われます」です。
Proactorにはオペレーティングシステムが必要であるため、Reactorモードのより詳細な分析には、通常Reactorモードを使用します。
高度な同時IO要求を処理するための次の3つのモードがあります
次のコードと画像は
ダグリー
従来のIOモデル
-
シングルリアクターシングル処理スレッド
1つのReactorが、IOやその他の操作を含むすべてのリクエストを処理します
-
シングルリアクターマルチプロセッシングスレッド
ReactorはIOのみを完了し、残りはワーカースレッドに渡されます
-
マルチリアクターマルチ処理スレッド
個別リクエストと実運用
4.非同期IO
ほとんど使用されず、オペレーティングシステムが必要
file = socket.getfile(buff,size);
// 等待一段时间
// buff size 中已经有了file
// 告诉我 我收到了
res = server.finishfile()