最近のインタビューで尋ねられた最も一般的な質問は、IO分野です。それらのいくつかは答えられましたが、それらのいくつかはうまく答えられていません。最近、私はこれらのことのいくつかについてもっと学び始め、それらを要約したいと考えています。
フロントポイント
1。ユーザースペースシステムスペース
Linuxシステムは、プロセスを2つのスペース、ユーザースペースとシステムスペースに分割します。たとえば、通常のエンコードはすべてユーザースペースです。システムファイルのコピーなどのシステム機能を呼び出す必要がある場合は、システムコンポーネントを呼び出し、カーネルサービスを取得し、完全な操作を取得する必要があります。
IOの2つの段階
IO実行プロセスは2つの段階に分割され、コピーを実行する準備ができています
待機準備:IO操作を実行すると、データは他のアプリケーションまたはネットワークから得られる可能性があることがわかります。データがない場合、オペレーティングシステムはそれを待ちます。この時点で、アプリケーションはコピーを待つこともあります:データをアプリケーションワークスペースにコピーする
ブロッキングと非ブロッキング、同期および非同期
最初に同期と非同期性について話しましょう。最も簡単なことは、スレッドまたはプロセスがIOを完了するかどうかを確認することです。 IOを同期すると、システムは停止し、他のことをする前にこれが終了するのを待ちます。非同期IOは、マルチスレッド方法を使用して新しいスレッドを起動してこれを行うため、他のことを行い、通知を待つことができます。
ブロッキングとノンブロッキングについて話しましょう。これらの2つのことは、実際にコール結果を待つときにプログラムの状態に焦点を当てています。ブロッキングとは、この結果が得られると、完全な結果を待つまで吊るされることを意味します。ノンブロッキングとは、プロセスが結果を取得できない場合、ブロッキングスレッドがないことを意味します。これは少しもつれです。よくある説明があります。ブロックしている場合は、このことを手に入れたいです。買収プロセス中、私はCPUを失います。結果までCPUを取得しません。ただし、非ブロッキングをしている場合は、CPUを保持し続けますが、それでも確認できます。
いくつかのIOモデル
現在、5つのタイプがあります
IOをブロックします
最も伝統的なIOタイプ、つまり、読み書きがブロックされます
非ブロッキングIO
ユーザーが読み取りを開始すると、CPUが失われることはなく、チェックを続けます。成功しないと、エラーが返されます。成功した信号を受信した場合、完全な結果を得るために読み取り操作を開始します。
多重化IO
これがJava Nioの中核です。複数のソケットのステータスを管理するスレッドがあり、準備ができているかどうかを確認します。あなたが本当に準備ができていることがわかったときのみ、あなたはIO操作を実行するためにCPUに電話します。これはより重要です
信号駆動IO
より少ない使用、無視してください
非同期IO
実行するスレッドを取得します