Apéndice A. Consejos para desarrolladores

Cada texto de programación cubre problemas sobre asignación de memoria y rendimiento de funciones específicas. Cuando usted desarrolle su software, tenga en cuenta los aspectos que pueden aumentar el consumo de energía en los sistemas en los cuales se ejecuta el software. Aunque estas consideraciones no afectan cada línea de código, puede optimizar su código en áreas en las cuales se presentan cuellos de botella para rendimiento.
Algunas técnicas que suelen ser problemáticas incluyen:
  • el uso de hilos.
  • los despertadores de CPU innecesarios y el uso ineficiente de despertadores. Si debe despertar, haga todo al mismo tiempo (carrera a ralentí) y tan pronto como sea posible.
  • el uso innecesario de [f]sync().
  • el polling activo innecesario o uso de plazos cortos o regulares. (Reaccionar a eventos en su lugar)
  • no usar eficientemente despertadores.
  • acceso ineficiente de disco. Usar grandes buffers para evitar el acceso frecuente a disco. Escribir un gran bloque a la vez.
  • el uso ineficiente de temporizadores. Temporizadores de grupo a través de aplicaciones (o incluso a través de sistemas) si es posible.
  • excesiva E/S. consumo de energía o uso de memoria (incluyendo filtraciones de memoria)
  • realización innecesaria de computos.
Las siguientes secciones examinan algunas de estas áreas de una forma más detallada.

A.1. Uso de hilos

Se cree que el uso de hilos hace que las aplicaciones tengan un rendimiento mejor y más ágil, pero no es cierto en todos los casos.
Python

Python usa el Global Lock Interpreter[1], por lo tanto, el uso de hilos es solo útil para operaciones de E/S mayores. Unladen-swallow [2] es una aplicación de Python más rápida con la cual puede optimizar su código.

Perl

Los hilos de Perl fueron creados originalmente para aplicaciones que se ejecutan en sistemas sin bifurcaciones (como los sistemas con sistemas operativos de Windows de 32 bits). En hilos de Perl, los datos se copian para cada hilo (Copia en Escritura). Los datos no son compartidos de forma predeterminada, puesto que los usuarios deben definir el nivel de datos compartidos. Para compartir datos, el módulo threads::shared tiene que estar incluido. Sin embargo, los datos no son solamente copiados (Copia en Escritura), sino que el módulo también crea variables vinculadas para los datos, lo cual toma aún más tiempo y es aún mucho más lenta. [3]

C

Los hilos C comparten la misma memoria, cada hilo tiene su propia pila y el kernel no tiene que crear nuevos descriptores de archivo ni asignar nuevo espacio de memoria. C puede usar el soporte de más CPU para más hilos. Por lo tanto, para maximizar el rendimiento de sus hilos, utilice un lenguaje de bajo nivel como C o C ++. Si utiliza un lenguaje de scripts, considere escribir un vínculo C. Use perfiladores para identificar las partes de su código que se ejecutan pobremente. [4]