Up|<<Prev|Next>>


9.3 I/O 階層

I/O 階層の実装は、NetCDFファイルのポータブルデータを読み書きするのための C standard I/O (stdio)ライブラリの実装とよく似ています。よって、標準的なI/Oライブラリを理解すれば、 同時にデータをアクセスする複数の処理や、I/Oバッファの使われ方、NetCDFファイルの開け閉めのコストに関する様々な疑問が解決されます。特に、NetCDFファイルに対して一つの書き込み処理が行なわれている間に 、別の複数の読み取り処理が進行することも可能です。データの読み書きには、stdio fread() fwrite() への呼び出しより下位のものは使用していない。 nc_sync 呼び出しは全て C standard I/O ライブラリの fflush 呼び出しと類似しており、他の処理が読み取れるように未記入の バッファデータを書き込んでいきます。 nc_sync は又、ヘッダーの変更(例えば、属性値への変更)を最新のものにします。 NC_SHARE the _IONBF フラグを setvbuf 状態にした、バッファされていないstdio streamを設定することと同義です。

stdio ライブラリの場合と同様に、ファイルの異なる部分への"探索"が生じると、 flushが実行される。従って、書き込み操作の順番はI/O性能に著しい影響を与えます。 各記録中にデータが書き込まれたのと同じ順番でデータを読み取ることによってバッファflushを最小限に留めることができます。

NetCDFデータアクセスは、同一のファイルに同時に複数の書き込み処理が行なえるようにはなっていません。

I/O階層を別のプラットフォーム固有のI/O階層に置き換えることにより、NetCDFの実装をあるプラットフォームに合わせて調整できます。これによってNetCDFと標準的なI/Oとの相似点、つまりデータ共有の性質・バッファ動作・I/O操作のコストなどが換わる可能性があります。

配布されたNetCDF実装は ポータブルであることを目標にしています。場合によっては、よりよいI/O性能のために実装を最適化するような プラットフォーム固有のポート の方が実用的でしょう。


Up|<<Prev|Next>>