RubyでIOバッファリングはどのように機能しますか? IO
クラスとFile
クラスを使用しているときに、データが基本ストリームにフラッシュされる頻度これはOSのバッファリングとどのように比較されますか?与えられたデータがディスクに書き込まれたことを保証するために、処理のためにそれを確実に読み取るためには、何をする必要がありますか?RubyとOSのI/Oバッファリングの理解
26
A
答えて
48
RubyのIOのドキュメントは、このバッファリングがどのように機能するかについては100%明確ではありませんが、これはあなたが文書から抽出することができるものである。
- RubyのIOは、それに加えて、独自の内部バッファ
- を持っています基礎となるオペレーティングシステムは、データをさらにバッファリングしてもよいし、しなくてもよい。
を見て、関連する方法:
IO.flush
:フラッシュしIO
。また、Rubyソースを見て、IO.flush
への呼び出しも基礎となるOSfflush()
を呼び出します。これは、ファイルをキャッシュに入れるのに十分なはずですが、物理データをディスクに保証するものではありません。IO.sync=
:true
に設定すると、Rubyの内部バッファリングは行われません。すべてが即座にOSに送信され、書き込みごとにfflush()
が呼び出されます。IO.sync
:現在の同期設定(true
またはfalse
)を返します。IO.fsync
:Rubyのバッファ+呼び出しを両方ともfsync()
(サポートしている場合)にします。これにより、物理ディスクファイルまでの完全なフラッシュが保証されます。IO.close
:RubyIO
を閉じ、保留中のデータをOSに書き込みます。これはfsync()
を意味するものではありません。close()
のPOSIXのドキュメントによれば、データがファイルに物理的に書き込まれることは保証されません。したがって、明示的にfsync()
呼び出しを使用する必要があります。
結論:flush
および/またはclose
が、それは別のプロセスや操作によって完全に読み取ることができるようにファイルをキャッシュし取得するのに十分でなければなりません。ファイルを確実に物理メディアに届けるには、IO.fsync
に電話する必要があります。
その他の関連メソッド:
IO.syswrite
:バイパスRubyの内部バッファとストレートOSwrite
を行います。これを使用する場合は、IO.read/write
と混同しないでください。IO.sysread
:上記と同じですが、読んでください。
1
Rubyは、OSの上で内部バッファリングを行います。 file.flushを実行すると、Rubyは内部バッファをフラッシュします。ファイルがディスクに書き込まれるようにするには、file.fsyncを実行する必要があります。しかし、最終的には、ファイルがディスクに書き込まれていることは確かではありません。OS、HDDコントローラ、HDDに依存します。
関連する問題
- 1. Haskellのデフォルトioバッファリング
- 2. NodeJSとノンブロッキングIOの理解
- 3. TCPでのバッファリングの理解
- 4. Rubyのバッファリングされた/ RingBuffer IO + Amazon S3ノンブロッキングチャンクの読み込み
- 5. Erlang io:フォーマットのバッファリングと効率
- 6. ScalaのIOモナドの理解
- 7. ApacheコモンズIOテイラの理解
- 8. IOバッファリングがオフになる
- 9. fwrite()のバッファリング動作の理解
- 10. 理解IO完了ポート
- 11. Rubyオープンクラスの理解
- 12. ruby pipe、IOとstderrリダイレクト
- 13. perlでのバッファリングされていないIO
- 14. rubyブロックを理解する
- 15. Ruby on Railsのレンダリング時間の理解
- 16. xslt 2.0とRuby on OS X
- 17. Ruby - 勝利方法の理解
- 18. モバイルOSとしてのPython/Ruby
- 19. Rubyでのメソッドの理解とJavaScriptの比較
- 20. Mac OS Rubyインストールの問題を解決するには
- 21. ruby chef os related
- 22. 私はバッファリングされた出力とcoutを理解していません
- 23. Ruby on Railsのクラス変数とメソッドの理解
- 24. Ruby IOストリームでの再割り当てと再オープンの違い
- 25. Androidでビデオストリームのバッファリングを管理する
- 26. ストリーミングとビデオのバッファリング
- 27. バックボーンとマリオネットの理解ライフサイクルの理解
- 28. chef_vaultとrubyコレクションを理解しようとしています
- 29. rubyエラーを理解できません
- 30. IO/Ruby on Railsをブロックする