0

私は、epoll、poll などを使用してノンブロッキング サーバーおよびクライアント アプリケーションを作成することを学んでおり、次のイベント フラグに出会いました。

POLLOUT: 今書いてもブロックされません。

ブロック読み取りの概念を理解しています。しかし、何が書き込みをブロックしているのでしょうか?

4

2 に答える 2

3

パイプ、ソケット、ターミナルなどのデバイスに、反対側が読み取る速度よりも速い速度で書き込みを行っている場合、最終的には関連するカーネル バッファーがいっぱいになり、後続の書き込みは、反対側でデータが読み取られるまでブロックされます。

于 2012-03-28T21:20:25.737 に答える
2

どの I/O 操作でも、ハードディスク (または他の低速 I/O デバイス) へのトリップが必要になる可能性があります。「ブロッキング」呼び出しは、ラウンドトリップ I/O が行われている間、単に待機する呼び出しです。つまり、読み取りが完了するのを待つことができるのと同じように、書き込みを待つことができます。

これは通常、従来のアプリケーションではあまり役に立ちません。OS にデータを書き込むように指示したい場合は、もう問題ではありません。リレーショナル データベース システムなどの I/O デバイス (ハードディスクなど) に格納されたデータの整合性を保証しようとすると、これが問題になります。(ただし、書き込みが完了したことを保証できる方法はブロッキングだけではないことに注意してください。また、コンピューターの複雑さが増しているため、実際のブロッキングに干渉する場合と干渉しない場合があるキャッシングの複数のレイヤーがあることに注意してください。)

于 2012-03-28T21:24:08.017 に答える