Comment node.js sait-il si un appel doit être exécuté dans le pool de threads ou dans la boucle d’événements?

J’ai lu que node.js utilise à la fois des marches et une boucle d’événement.

Je suis curieux de savoir comment il sait comment traiter un rappel … Est-ce spécifié par EventEmitter (et l’ingénieur sait-il s’il va bloquer ou non)?

Ou est-ce que le kernel lui-même le choisit au moment de l’exécution? Si c’est celui-ci, comment détecte-t-il s’il doit être exécuté en mode asynchrone ou en mode thread?

J’ai déjà lu beaucoup de ressources mais je n’ai pas trouvé à ce sujet. Je lis le code source mais c’est difficile car c’est beaucoup de temps depuis la dernière fois que j’ai codé en C ++.

Merci

Votre code JavaScript s’exécute toujours dans un seul thread. En effet, le moteur JavaScript V8 n’est pas threadsafe.

Cependant, en tant que détail d’implémentation de certains codes C ++, il peut y avoir des threads. Par exemple, supposons que vous écriviez du code JavaScript qui se connecte à une firebase database. Votre code JavaScript sera bien sûr asynchrone, comme tout bon code de nœud. Toutefois, le codage asynchrone est très rare dans le monde C / C ++. Le fournisseur de firebase database n’a donc probablement pas écrit d’API C / C ++ asynchrone.

Ainsi, lorsque quelqu’un écrit un package de nœud pour accéder à une firebase database, il doit écrire un schéma adaptatif qui s’adapte entre le comportement C ++ “bloquant” et le comportement de nœud “non bloquant, événementiel”. Lorsque vous appelez, par exemple, une méthode “connect”, le code C ++ crée un nouveau thread et ce thread émet un appel (bloquant) “connect” à la firebase database, qui le bloque jusqu’à la fin de la connexion. Ensuite, le code C ++ communiquera la “connexion établie” à la queue des événements, et la prochaine fois que le thread principal (JavaScript) interrogera la queue des événements, votre rappel se déclenchera.

Donc oui, il existe des threads, mais leur utilisation doit être totalement transparente pour vous. Lorsque vous écrivez du code Node.js en JavaScript, vous n’avez pas à vous soucier des threads, vous devez juste vous assurer que les choses se passent quand elles sont supposées l’être. Les auteurs de packages peuvent utiliser des threads, mais il ne s’agit que d’un détail d’implémentation et vous ne devriez jamais vous en soucier. Votre code JavaScript n’utilise jamais explicitement les threads.