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

JavaScript Discussion :

Différence entre Asynchrone et modèle non bloquant


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    aucun
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Points : 42
    Points
    42
    Par défaut Différence entre Asynchrone et modèle non bloquant
    Bonjours à tous je voudrait savoir si il y à une difference entre un code asynchrone et non blanquant et quelle est cette difference, J'ai vu que par exemple pour un système d'upload en faisant du code non bloquant des fichiers peuvent etre transférés en parallèle, mais si j'ai bien compris on ne peut exécuté les évènements que un par un et qu'il faut attendre que la pile d'execution de cette evènement se termine pour passer à un autre évènement donc comment c'est possible de faire du parallélisme.

    Désolé si je ne suis pas assez clair je donnerai plus d'explication de mon petit soucis sous demande, merci d'avance de vos réponses.

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Dans le jargon JavaScript, il n'y a pas de différence entre asynchrone et non bloquant. Par exemple, un appel Ajax est par défaut asynchrone, mais on peut le rendre bloquant si on passe false en 3e paramètre à sa méthode open :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var requester = new XMLHttpRequest();
     
    requester.open("GET", "example.com", false); // ouverture en mode synchrone
    L'Ajax synchrone est quelque chose que je déconseille en général, car on perd tous les avantages d'Ajax.

    Historiquement et par conception, JavaScript n'est exécuté que dans un seul thread (un seul « fil d'exécution » sur le processeur). Si tu appelles une ressource (requête réseau, système de fichier, etc.) en mode bloquant, le thread JavaScript est suspendu le temps que la transaction avec la ressource se termine, par exemple le temps qu'un fichier soit complètement uploadé. L'intérêt de faire des appels non bloquants, c'est que l'upload est géré par un autre thread, et JavaScript peut continuer à tourner pendant ce temps. Ça lui permet, entre autres, d'initier un autre upload de fichier.

    Avec Node.js, tu as souvent le choix entre une méthode asynchrone et une autre synchrone qui fait la même chose, par exemple fs.read (asynchrone) et fs.readSync (synchrone), qui servent toutes les deux à lire un fichier.

    Il y a un autre problème avec le mode bloquant en JavaScript dans les navigateurs. Du fait qu'il n'y a qu'un seul thread, et que JavaScript gère le comportement des pages web, c'est la page toute entière qui est gelée pendant toute la durée de l'appel bloquant. Un appel Ajax synchrone vers un serveur lent peut geler la page pendant plusieurs secondes, et ça rend l'utilisation du site plutôt désagréable…

    Depuis quelques temps il est possible de faire du parallélisme en JavaScript grâce aux Web Workers. En gros, ils permettent de créer des threads JavaScript. J'en ai entendu parler pour la première fois grâce à David Rousset sur Developpez.com, qui présentait son excellent article qui explique bien mieux que moi tout ce que je viens de te raconter
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre du Club
    Homme Profil pro
    aucun
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Merci de t'as réponse mais j'ai encore un soucil sur l'upload. On dit que Javascript et monothread mais que l'upload et géré par un autre thread je suis encore un peu confus sur ceci.

    J'ai aussi entendu parler des Webworkers dans le libre de Nicolas Froidure j'ai pas encore eu le temps de tester ni de voir comment sa marche (au fait merci pour l'article en effet il a l'air complet).

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Bah JavaScript c'est JavaScript et l'upload c'est l'upload. Tu te doutes bien qu'il est pas écrit en JavaScript.

    Autrement dit, JavaScript c'est le code que tu fournis dans ta page et que tu demandes à ce que le navigateur l'exécute. Et le navigateur ne dédiera qu'un thread, un seul*, pour exécuter ce code de la page.

    Par contre, le code qui n'est pas JavaScript, que tu n'as pas fourni toi-même, alors ça le navigateur fait ce qu'il veut. Il fera le plus logique. En mode synchrone/bloquant, il a pas trop le choix : il exécute sur le même thread que celui dédié au JavaScript. Parce que de toute façon le thread JavaScript doit rester bloqué là jusqu'à ce que l'opération soit finie.
    Mais en mode asynchrone/non-bloquant, le thread ne reste pas bloqué là à attendre la fin de l'opération, il continue le code qui suit. L'opération peut donc être confiée à un autre thread, vraisemblablement tiré du pool de threads d'IO du navigateur. Pendant ce temps-là, le thread JavaScript peut faire autre chose. Lorsque l'opération sera finie, elle devra appeler les listeners, qui sont en JavaScript et doivent être exécutés sur le thread Javascript. Les listeners devront donc attendre que le thread JavaScript soit libre, puis s'exécuter grâce à lui quand il le devient.

    * Sauf, effectivement, emploi des Web Workers.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    aucun
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Ahh je comprend merci je me doutait qu'il n'etait pas géré pas Javascript merci de vos réponses je passe le sujet en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre solutions gérées et non gérées
    Par Nageh dans le forum Microsoft Dynamics CRM
    Réponses: 3
    Dernier message: 08/10/2014, 00h04
  2. Réponses: 2
    Dernier message: 04/08/2014, 13h43
  3. [ZF 1.11] Différence entre dbtable et modèle
    Par Romalafrite dans le forum Zend Framework
    Réponses: 2
    Dernier message: 04/04/2011, 12h25
  4. Réponses: 19
    Dernier message: 22/11/2008, 13h50
  5. [Web Service][SOAP] Différence entre mode WSDL en non WSDL
    Par Amnesiak dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/03/2008, 12h15

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