Annexe A. Astuces pour les développeurs
- l'utilisation de threads.
- les réveils CPU inutiles et l'utilisation incorrecte des réveils. Si vous devez effectuer un réveil, faites-le en une seule fois et aussi vite que possible (en anglais, « race to idle »).
- l'utilisation de
[f]sync()
sans que cela ne soit nécessaire. - les interrogations actives inutiles, ou l'utilisation de délais d'attente réguliers et de courtes durées. (Au lieu de cela, il vaut mieux réagir aux événements)
- une utilisation des réveils inefficace.
- un accès disque inefficace. Utilisez des mémoires-tampons de grande taille pour éviter un accès au disque trop fréquent. N'écrivez qu'un grand bloc à la fois.
- une utilisation inefficace des minuteurs. Groupez les minuteurs sur plusieurs applications (ou même sur plusieurs systèmes) si possible.
- des E/S, ou une consommation d'énergie ou utilisation de mémoire excessive (y compris les fuites mémoires)
- l'exécution de calculs inutiles.
A.1. Utilisation de threads
Python utilise le verrou global, Global Lock Interpreter[1], ainsi le threading n'est utile que pour de grandes opérations d'E/S. Unladen-swallow [2] est une implémentation plus rapide de Python avec laquelle vous serez probablement en mesure d'optimiser votre code.
À l'origine, les threads Perl furent créés pour des applications exécutées sur des systèmes sans bifurcation (de l'anglais, forking) (comme sur les systèmes avec système d'exploitation 32-bit 32-bit). Dans les threads Perl, les données sont copiées pour chaque thread (copie sur écriture). Par défaut, les données ne sont pas partagées, car les utilisateurs devraient pouvoir être en mesure de définir le niveau de partage des données. Pour le partage de données, le module threads::shared doit être inclut.Cependant, les données ne sont pas seulement copiées (copie sur écriture), mais le module crée aussi des variables attachées pour ces données, ce qui prendra encore plus de temps et sera encore plus lent. [3]Windows
Les threads C partagent la même mémoire, chaque thread possède sa propre pile, et le noyau n'a pas à créer de nouveaux descripteurs de fichiers ou à allouer de nouvel espace mémoire. C peut réellement utiliser la prise en charge de plus de CPUs pour plus de threads, Ainsi, vous pouvez utiliser un langage de bas niveau tel que C ou C++ afin de maximiser la performance de vos threads. Si vous utilisez un langage de script, prenez en considération un binding avec C. Utilisez des profileurs afin d'identifier les parties de votre code performant mal. [4]