Je suis un étudiant en informatique et j'entends beaucoup le mot "surcharge" lorsqu'il est question de programmes et de programmes. Qu'est-ce que cela signifie exactement?
Ce sont les ressources nécessaires pour mettre en place une opération. Cela peut sembler sans rapport, mais nécessaire.
C'est comme si vous deviez aller quelque part, vous pourriez avoir besoin d'une voiture. Mais ce serait beaucoup de frais généraux pour obtenir une voiture dans la rue, alors vous voudrez peut-être marcher. Toutefois, les frais généraux en valent la peine si vous traversez le pays.
En informatique, nous utilisons parfois des voitures pour descendre dans la rue parce que nous n’avons pas de meilleure façon de faire ou que cela ne vaut pas la peine de notre temps pour "apprendre à marcher".
La signification de la Parole peut différer beaucoup avec le contexte. En général, ce sont les ressources (le plus souvent, la mémoire et le temps processeur) qui sont utilisées, qui ne contribuent pas directement au résultat souhaité, mais qui sont requises par la technologie ou la méthode utilisée. Exemples:
Vous êtes fatigué et vous ne pouvez plus travailler. Tu manges de la nourriture. L'énergie dépensée à chercher de la nourriture, à l'obtenir et à la manger consomme de l'énergie et représente des frais généraux!
Les frais généraux sont une dépense inutile pour accomplir une tâche. Le but est de rendre les frais généraux très très petits.
En informatique, disons que vous voulez imprimer un nombre, c’est votre tâche. Mais stocker le numéro, configurer l’affichage pour l’imprimer et appeler des routines pour l’imprimer, puis accéder au numéro à partir de la variable sont tous des frais généraux.
Wikipedia nous a couvert :
En informatique, frais généraux est généralement considéré comme une combinaison de temps de calcul excessif ou indirect, de mémoire, de bande passante ou d'autres ressources nécessaires à la réalisation d'un objectif particulier. . C'est un cas particulier de frais généraux d'ingénierie.
Les frais généraux correspondent généralement à la quantité de ressources supplémentaires (mémoire, processeur, temps, etc.) nécessaires aux différents algorithmes de programmation.
Par exemple, l'insertion dans un arbre binaire équilibré peut nécessiter beaucoup plus de ressources que le même insert dans une simple liste chaînée (l'insertion durera plus longtemps, utilisez plus de puissance de calcul pour équilibrer l'arbre, ce qui se traduira par une durée de fonctionnement plus longue l'utilisateur).
Pour un programmeur, le temps système désigne les ressources système utilisées par votre code lorsqu'il est exécuté sur une plate-forme donnée sur un ensemble donné de données d'entrée. Généralement, le terme est utilisé dans le contexte de la comparaison de différentes implémentations ou d'implémentations possibles.
Par exemple, nous pourrions dire qu’une approche particulière peut entraîner une surcharge de traitement considérable, tandis qu’une autre peut entraîner une surcharge de mémoire, tandis qu’une autre peut être affectée à la surcharge de réseau (et entraîner une dépendance externe, par exemple).
Donnons un exemple spécifique: Calculez la moyenne (moyenne arithmétique) d'un ensemble de nombres.
L'approche évidente consiste à boucler sur les entrées, en gardant un total cumulé et un compte. Lorsque le dernier numéro est rencontré (signalé par "fin de fichier", EOF, ou une valeur sentinelle, ou une interface graphique, peu importe), nous divisons simplement le total par le nombre d'entrées et nous avons terminé.
Cette approche n'engendre quasiment pas de surcharge en termes de ressources processeur, mémoire ou autres. (C'est une tâche triviale).
Une autre approche possible consiste à "insérer" l'entrée dans une liste. parcourez la liste pour calculer la somme, puis divisez-la par le nombre d'éléments valides de la liste.
En comparaison, cette approche peut engendrer une surcharge de mémoire arbitraire.
Dans une mauvaise implémentation particulière, nous pouvons effectuer l'opération de somme en utilisant la récursivité, mais sans élimination de la fin. Maintenant, en plus de la surcharge de mémoire de notre liste, nous introduisons également la surcharge de pile (qui est un type de mémoire différent et constitue souvent une ressource plus limitée que d’autres formes de mémoire).
Une autre approche (sans doute plus absurde) consisterait à publier toutes les entrées dans une table SQL dans un SGBDR. Ensuite, appelez simplement la fonction SQL SUM sur cette colonne de la table. Cela déplace notre surcharge de mémoire locale vers un autre serveur et entraîne une surcharge de réseau et des dépendances externes sur notre exécution. (Notez que le serveur distant peut avoir ou non une surcharge de mémoire particulière associée à cette tâche - par exemple, il pourrait déplacer toutes les valeurs immédiatement vers le stockage).
De manière hypothétique, on pourrait envisager une mise en œuvre sur une sorte de cluster (éventuellement pour rendre possible l’estimation de milliards de valeurs). Dans ce cas, tout codage et distribution des valeurs nécessaires (en les mappant vers les nœuds) et la collecte/le classement des résultats (réduction) sont considérés comme des frais généraux.
Nous pouvons également parler des frais généraux engendrés par des facteurs autres que le code du programmeur. Par exemple, la compilation de certains codes pour des processeurs 32 ou 64 bits peut entraîner une surcharge plus importante que celle que l’on pourrait voir avec une ancienne architecture 8 bits ou 16 bits. Cela peut impliquer une surcharge de mémoire plus importante (problèmes d'alignement) ou de CPU (le processeur est obligé de régler l'ordre des bits ou d'utiliser des instructions non alignées, etc.) ou les deux.
Notez que l’espace disque occupé par votre code et ses bibliothèques, etc., n’est généralement pas appelé "surcharge", mais plutôt "empreinte". De plus, la mémoire de base que votre programme consomme (sans tenir compte des fichiers qu’elle traite) s'appelle également son "empreinte".
Les frais généraux représentent tout simplement la perte de temps liée à l'exécution du programme. Exemple ; lorsque nous appelons une fonction et que son contrôle est passé à l'endroit où il est défini, puis que son corps est exécuté, cela signifie que notre processeur doit exécuter un long processus (en passant le contrôle à un autre emplacement en mémoire, puis en l'exécutant à cet endroit). redonner le contrôle à la position précédente), par conséquent cela prend beaucoup de temps de performance, donc de frais généraux. Nos objectifs sont de réduire cette surcharge en utilisant le inline lors de la définition de la fonction et du temps d’appel, qui copie le contenu de la fonction lors de l’appel de la fonction. Nous ne transmettons donc pas le contrôle à un autre emplacement, mais continuons notre programme en ligne, donc en ligne. .
Vous pourriez utiliser un dictionnaire. La définition est la même. Mais pour vous faire gagner du temps, les frais généraux sont le travail nécessaire pour faire le travail productif. Par exemple, un algorithme s'exécute et fait un travail utile, mais nécessite de la mémoire pour effectuer son travail. Cette allocation de mémoire prend du temps et n'est pas directement liée au travail en cours, elle est donc une surcharge.
Considérez les frais généraux comme le temps nécessaire pour gérer les threads et les coordonner. C'est un fardeau si le thread n'a pas assez de tâche à faire. Dans un tel cas, les frais généraux dépassent le temps gagné grâce à l'utilisation du threading et le code prend plus de temps que le code séquentiel.
Un exemple concret de surcharge est la différence entre un appel de procédure "local" et un appel de procédure "distant".
Par exemple, avec le RPC classique (et de nombreux autres frameworks distants, tels que EJB), un appel de fonction ou de méthode a la même apparence pour un codeur, qu’il s’agisse d’un appel local, en mémoire ou d’un appel réseau distribué.
Par exemple:
service.function(param1, param2);
Est-ce une méthode normale ou une méthode distante? D'après ce que vous voyez ici, vous ne pouvez pas le dire.
Mais vous pouvez imaginer que la différence de temps d'exécution entre les deux appels est spectaculaire.
Ainsi, alors que l’implémentation principale "coûtera la même chose", les "frais généraux" impliqués sont très différents.
Vous pouvez vérifier Wikipedia . Mais surtout lorsque plus d'actions ou de ressources sont utilisées. Par exemple, si vous connaissez bien .NET, vous pouvez avoir des types de valeur et des types de référence. Les types de référence entraînent une surcharge de mémoire car ils nécessitent plus de mémoire que les types de valeur.