lunes, 28 de julio de 2008

Comparativa de rendimiento en la lectura de ficheros

A vueltas con el rendimiento en I/O :-)

Este artículo y comparación es tremendamente interesante, sobre todo porque está documentado con datos de benchmarking aunque sobre un hardware particular, ojo. Las conclusiones son las de "casi siempre", pero para un tío oxidado como yo está bien que se meta la NIO entre las comparaciones. Y que se compare con C, que sigue ganando, je je.

Sólo pegaré aquí las conclusiones, el resto debe leerse en el artículo original:

How read files quickly

For the best Java read performance, there are four things to
remember:

  • Minimize I/O operations by reading an array at a time, not a byte
    at a time. An 8Kbyte array is a good size.
  • Minimize method calls by getting
    data an array at a time, not a byte at a time. Use array indexing to get at
    bytes in the array.
  • Minimize thread synchronization locks if you don't need
    thread safety. Either make fewer method calls to a thread-safe class, or use a
    non-thread-safe class like FileChannel and MappedByteBuffer.
  • Minimize data
    copying between the JVM/OS, internal buffers, and application arrays. Use
    FileChannel with memory mapping, or a direct or wrapped array ByteBuffer.
Si tuviera tiempo, me gustaría compararlo con una la versión "no sincornizada" de BufferedInputStream, para ver el impacto que en concreto introducen las regiones de exclusión mutua.

Ubicación original del artículo: http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly

No hay comentarios: