Apéndice A. Consejos para desarrolladores
- 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.
A.1. Uso de hilos
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.
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]
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]