IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseaux Discussion :

Théorie de la boucle infinie


Sujet :

Réseaux

  1. #1
    Membre à l'essai Avatar de ebenezer10
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Théorie de la boucle infinie
    Bonjour les developpeurs.j'ai une question qui me passe par la tête assez souvent.Quand on écrit une boucle infinie,notre programme se crash.Comment font alors les programmes qui sont en permanente écoute sur le réseau par exemple?N'est-ce pas une boucle infinie qu'ils utilisent eux aussi?Comment ils font pour que le programme ne crash pas???

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 359
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 359
    Points : 20 374
    Points
    20 374
    Par défaut
    Citation Envoyé par ebenezer10 Voir le message
    Quand on écrit une boucle infinie,notre programme se crash.Comment font alors les programmes qui sont en permanente écoute sur le réseau par exemple?N'est-ce pas une boucle infinie qu'ils utilisent eux aussi?Comment ils font pour que le programme ne crash pas???
    c'est exact eh bien tout simplement le programme parent crée un autre programme qui lui est "parallèle" mais qui est en quelque sorte sous-jacent au programme parent ça s'appelle un "thread".
    Pour arrêter le programme fils, le programme parent met à vrai une variable globale au programme de type booléen par exemple arret_programme..
    il y a des méthodes plus sophistiquées selon les langages et les API ( par exemple l'API win32 WaitForSingleObject())

    En programmation Linux on peut appeler fork() par exemple

    En programmation win32 ( et en langage C/C++) pour les programmes avec fenêtre donc graphiques il faut qu'il y ait effectivement une boucle infinie...
    chaque programme en général est crée avec CreateWindows et une fonction "Callback" qui lui est associée ( c.a.d. ré-entrante , qui est appelée à intervalles réguliers en fait un pointeur C de fonction )
    Si on veut que le programme s'arrête le Program Manager du noyau de Window place dans ce que l'on appelle la boucle de message de cette fonction Callback des messages prédefinis comme WM_DESTROY

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 717
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 717
    Points : 15 094
    Points
    15 094
    Par défaut
    Salut,
    Citation Envoyé par Mat.M Voir le message
    --snip--
    Trop compliquée, ta réponse, et un peu à côté de la plaque, àmha. La chaleur, sans doute...

    Citation Envoyé par ebenezer10 Voir le message
    [...] N'est-ce pas une boucle infinie qu'ils utilisent eux aussi ? Comment ils font pour que le programme ne crashe pas ???
    Imagine que tu habites dans un village et que comme tout bon village qui se respecte il y a une place du village avec un bistrot sur cette place.
    Et toute la sainte journée tu tournes en rond à faire le tour de la place, en boucle.
    Et à chaque tour tu t'arrêtes au bistrot, tu prends une canette de bière et tu la bois pendant le reste du tour. Et tu recommences, à l'infini.
    On est bien d'accord qu'à la fin de la journée tu vas être complètement ivre mort explosé dans un coin, ok ?
    La solution consiste donc, avant de prendre une nouvelle canette, à s'arrêter contre un mur pour vomir le contenu de la précédente canette.

    En programmation, quand tu lances ta boucle tu demandes au système de t'allouer des ressources (mémoire par exemple), qu'il va te falloir libérer avant d'attaquer le nouveau tour de boucle, sinon à la fin il n'y aura plus de mémoire libre et le programme crashera.
    Voilà.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 359
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 359
    Points : 20 374
    Points
    20 374
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,
    Trop compliquée, ta réponse, et un peu à côté de la plaque, àmha. La chaleur, sans doute...
    ma réponse n'est pas du tout "à côté de la plaque" on ne peut pas faire plus simple.
    Sinon on ne fait pas de programmation ; ensuite pour ce qui est des threads je sais par expérience ( j'ai tout de même plus de quinze ans en entreprise) que ça finit par arriver dans un projet informatique
    En programmation informatique il y a des aspects un peu pointus de la programmation;
    c'est comme les mathématiques expliquer ce qu'est une équation différentielle et les équations différentielles par exemple c'est indissociable des mathématiques
    Citation Envoyé par Jipété Voir le message
    En programmation, quand tu lances ta boucle tu demandes au système de t'allouer des ressources (mémoire par exemple), qu'il va te falloir libérer avant d'attaquer le nouveau tour de boucle, sinon à la fin il n'y aura plus de mémoire libre et le programme crashera.
    Voilà.
    on peut très bien créer une boucle dans un programme un simple while() sans aucune allocation de ressources en particulier
    Une boucle dans du code machine assembleur c'est simplement le pointeur d'instruction dans le CPU qui retourne à une adresse de départ

  5. #5
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 922
    Points : 23 222
    Points
    23 222
    Billets dans le blog
    10
    Par défaut
    Bonsoir

    Vous parlez de la boucle infinie, une fonction itérative ou une fonction récursive ?

    Le plus gros risque c'est la pile en débordement un Stack overflow.

    Pour éviter cela il faut libérer la pile ou prévoir un point d'arrêt pour la fonction récursive.

    Il ne faut pas confondre avec un programme résident (TSR sous DOS) qui reste en mémoire à l'écoute d'une interruption Hardware ou Software.

    C'est le cas du programme qui écoute le clavier, la souris, le réseau, un port USB ainsi de suite.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  6. #6
    Membre actif

    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2017
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2017
    Messages : 183
    Points : 286
    Points
    286
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ebenezer10 Voir le message
    Bonjour les developpeurs.j'ai une question qui me passe par la tête assez souvent.Quand on écrit une boucle infinie,notre programme se crash.Comment font alors les programmes qui sont en permanente écoute sur le réseau par exemple?N'est-ce pas une boucle infinie qu'ils utilisent eux aussi?Comment ils font pour que le programme ne crash pas???
    Je vais essayer de répondre :
    Tu peux avoir deux problèmes avec une boucle :
    => tu fais une opération, genre un +1, au bout d'un moment la variable sera trop grande pour être mémoriser par l'ordinateur => plantage.
    => tu tourne en rond, sans jamais en sortir => ton programme est bloqué.
    C'est comportement ne sont généralement pas normal.

    Cependant, quand tu écoute une carte réseau par exemple, tu peux très bien faire un boucle infini :
    Ecouter si quelque chose arrive => si oui, l'envoyer à la couche supérieur => revenir à l'étape 1.

    Si ton programme peut faire plusieurs choses en même temps, ton programme est pas bloqué et comme tu garde pas les infos, tes variables reste maîtrisé.

    Dans le cadre des microcontrôleur, le cœur du programme c'est une boucle infini. On met tout dedans et le programme va faire toutes les lignes et recommencer à l'infini. Tu peux essayer avec un Arduino, c'est assez fun comme petit truc (il existe des simulateurs).

    Sinon, il existe les interruptions, comme le dit JML19 : quand quelque chose se passe, on appelle un bout de programme.

    En gros, les boucles infinis c'est une mauvaises choses dans certains langages car ce n'est pas fait pour mais dans d'autre situation c'est LA solution.

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 717
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 717
    Points : 15 094
    Points
    15 094
    Par défaut
    Citation Envoyé par jaffommopeff-9757 Voir le message
    => tu fais une opération, genre un +1, au bout d'un moment la variable sera trop grande pour être mémorisée par l'ordinateur => plantage.
    Non : la variable a une taille définie au départ, elle ne sera pas "trop grande", c'est la valeur contenue dedans qui peut l'être.
    Et non : il n'y aura pas plantage de l'ordinateur, la valeur continuera sa vie, exemple avec une variable de type byte dont la valeur peut aller de 0 à 25510 (FF16) : si tu fais +1 quand tous les bits sont à 1, tu te retrouves avec tous les bits à 0 et le bit de dépassement (de retenue, le "carry") qui passe à 1, s'il existe.
    Et s'il existe, il appartient au programme de le gérer.

    C'est la vieille histoire du débordement du temps sur les machines Windows 95 qui réinitialisaient leur horloge pour celles qui restaient allumées plus de 49 jours. Cherche, c'est connu.

    EDIT : tiens, j'ai pris -1 sur ce message. Quelqu'un peut me dire où j'ai tort ? Merci, /EDIT
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre actif

    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2017
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2017
    Messages : 183
    Points : 286
    Points
    286
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Non : la variable a une taille définie au départ, elle ne sera pas "trop grande", c'est la valeur contenue dedans qui peut l'être.
    Ok sur la majorité des cas mais j'ai comme un doute en objet : si j'ai un objet qui contient un objet et qu'a chaque boucle je lui fais contenir de nouveau un objet ? Je suis assez sur qu'on peut exploser la zone mémoire. Ou si à chaque boucle j'instance un objet ?

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 717
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 717
    Points : 15 094
    Points
    15 094
    Par défaut
    Citation Envoyé par jaffommopeff-9757 Voir le message
    Je suis assez sur qu'on peut exploser la zone mémoire.
    sûr avec un chapeau, sinon tu es sur quelque chose, ce qui est assez différent d'être sûr de quelque chose. Comme dans ma signature. Elle sert à quoi, sinon, mmmh ?
    Pour être bien compris il faut avoir bien écrit.

    Et moi je ne suis sûr de rien pour la bonne et simple raison qu'un "objet", comme tu dis, est une notion abstraite proposée par le(s) concepteur(s) du langage que tu utilises, mise en place pour te faciliter la vie au quotidien en te masquant la réalité sordide des aspects bas niveau.
    Mais au final du final, tes "objets" fonctionnent avec des pointeurs vers des variables définies bien souvent comme des integer sur 32 ou 64 bits selon l'archi, et tu vas surement retomber sur ce que j'exposais hier.
    À moins qu'il n'y ait des mécanismes qui t'en protègent.

    Citation Envoyé par jaffommopeff-9757 Voir le message
    Ou si à chaque boucle j'instance un objet ?
    J'instancie avec un "i", du verbe "instancier" : j'instancie une instance, ben oui.

    Sinon, la réponse est juste au-dessus.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Membre actif

    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2017
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2017
    Messages : 183
    Points : 286
    Points
    286
    Billets dans le blog
    2
    Par défaut
    A Jipété : Et bé ... cé agréable de parlé avec toi !

    Bon, comme je suis pas là pour savoir qui est le meilleur mais pour discuter ensemble et pour partager nos expériences : revenons à nos moutons.
    ebenezer10, est-ce que tu as un peu plus d'éléments de réponse ?
    Et est-ce que quelqu'un d'autre veut partager son avis ?

  11. #11
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 922
    Points : 23 222
    Points
    23 222
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par jaffommopeff-9757 Voir le message
    A Jipété : Et bé ... cé agréable de parlé avec toi !
    Certains sur ce site sont très forts, mais vraiment très, très très fort !

    Je sais ça surprend lorsque l'on débarque sur le site.

    J'ai personnellement arrêté depuis longtemps de faire parti de ceux qui veulent avoir la plus longue !

    Alors cool, ça ne mange pas de pain !
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  12. #12
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Citation Envoyé par ebenezer10 Voir le message
    Quand on écrit une boucle infinie,notre programme se crash.
    Il n'y a que moi que cette phrase choque ?

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
     
    int main (void)
    {
       do
       {
          printf ("hello world");
       }
       while (1);
     
    return 0 ; /* not reachable */
    }

    Ça ne crash pas chez moi -- et ça ne devrait crasher chez personne.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  13. #13
    Membre à l'essai Avatar de ebenezer10
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    je viens de faire une boucle infinie en python qui fait juste un print.je l'ai laissé longtemps mais ça n'a pas crashé.

    Apparemment quand on ne stock pas de valeur,tout va à merveille.

    je crois que c'est quand on essayera de stocker des valeurs dans la mémoire que le problème se corse non?!?

  14. #14
    Membre actif

    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2017
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2017
    Messages : 183
    Points : 286
    Points
    286
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ebenezer10 Voir le message
    je crois que c'est quand on essayera de stocker des valeurs dans la mémoire que le problème se corse non?!?
    Oui, seul la mémoire d'un ordinateur n'est pas infinie

  15. #15
    Membre à l'essai Avatar de ebenezer10
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Ok.je crois cerner.Donc à un moment donné il faut il faut vider la mémoire.

    Et que se passera si je fais un ma_var*=1000 dans une boucle infinie par exemple?
    Arrivera un moment où mon programme crash?

  16. #16
    Membre actif

    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2017
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2017
    Messages : 183
    Points : 286
    Points
    286
    Billets dans le blog
    2
    Par défaut
    Comme le dit jipété, une variable prédéfinie ne peut pas déborder. Dans le cas d'une opération algorithmique, c'est donc théoriquement bon. Tu va reboucler sur ta variable et donc à un moment ton résulta sera plus petit alors que tu as multiplier par deux nombres positifs, mais le programme ne devrais pas planter.
    C'est quand tu instancie, quand tu crées, un objet que les choses se complique. Le système va en continue demander d'instancier un nouvelle objet et à un moment l'ordinateur ne pourra plus stocker.

  17. #17
    Membre à l'essai Avatar de ebenezer10
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Ok tout est claire maintenant.merci à vous tous.

Discussions similaires

  1. [Boucle Infinie] pour un menu
    Par NhyMbuS dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2005, 09h14
  2. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  3. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  4. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo