En javascript, la notion d'asynchronisme est omniprésente. Que ce soit pour la gestion des événements ou la récupération de données ou simplement avec des méthodes comme setTimeout, il est pratiquement impossible d'y échapper !
Premier exemple
console.log('avant'); setTimeout(() => {console.log('affiché après 2 secondes');},2000); console.log('après');
Vous constatez que le message "affiché après 2 secondes" s'affiche en dernier. On peut en conclure que la méthode setTimeout est "non bloquante", c'est à dire qu'il n'est pas nécessaire d'attendre son résultat pour passer à l'exécution de la ligne suivante. On dit alors qu'elle est asynchrone.
"Fil d'éxécution" ou thread
Cela va nous permettre d'introduire la notion de "fil d'éxécution" ou thread. Pour comprendre cette notion, on fait souvent la comparaison avec un serveur dans un restaurant : lorsque vous commandez, le serveur part en cuisine, passe la commande et retourne en salle pour prendre d'autres commandes. On comprend que la commande est "non bloquante" ou asynchrone, c'est à dire que le serveur n'a pas besoin d'attendre que le plat soit prêt pour continuer son travail. Quand votre plat sera prêt, c'est toujours le même serveur qui vous servira votre plat. On dit alors que le service est mono-thread en opposition à muti-thread.
Il en est de même pour le javascript classique qui est mono-thread, ce qui signifie qu'il n'y a qu'une seule pile d'exécution.