GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué mi función cat con llamadas al sistema es más lenta en comparación con cat de Linux?

Ah, según tu edición, el búfer de lectura anticipada te estaba mordiendo. No puede probar dos programas que leen archivos uno al lado del otro ejecutándolos una vez. El primero siempre será más lento ya que el archivo está en el disco, una vez que el archivo esté en la memoria, el segundo se ejecutará más rápido, debe crear nuevos datos para cada uno o ejecutar uno y luego ejecutar ambos para que ambos obtengan el beneficio del búfer de lectura anticipada.


¿Quizás compiló sin optimización (o sin una configuración de optimización tan alta)?

Además, su código llamará a sysWriteBuffer una vez con readBytes igual a cero, ¿quizás eso (parcialmente) lo explique?

También puede usar sysWriteBuffer en línea (ya sea a través de un conmutador de compilador o manualmente).

"en línea" significa copiar el cuerpo de una función en su sitio de llamada para eliminar la sobrecarga de llamar a una función. A veces, los compiladores hacen esto automáticamente (creo que -O3 habilita esta optimización en gcc). También puedes usar el inline palabra clave en gcc para decirle al compilador que inserte una función. Si hace esto, su declaración se verá así:

static inline int sysWriteBuffer(int fdout, char *buffer, ssize_t readBytes) {
....

Investigación mmap(2).

Descartará detalles sutiles de ftell/fread, pero se saltará una capa de direccionamiento indirecto si el rendimiento de lectura es realmente importante.


Linux
  1. Por qué me quedo con xterm

  2. Mejore el rendimiento del sistema Linux con noatime

  3. Por qué me enamoré de Antergos Linux

  4. Comando de apagado de Linux (con ejemplos)

  5. Linux:¿monitoreo de todo el sistema de llamadas a una función de biblioteca?

Comando Uptime de Linux con ejemplos

Uso de Cat Command en Linux con ejemplos

Primeros pasos con el sistema operativo Linux

Encuentre información de hardware del sistema Linux con Hwinfo

Cómo ver las estadísticas del sistema Linux con Saidar

¿Qué son las llamadas al sistema Linux y las funciones de biblioteca?