Je ne suis pas un programmeur Node, mais je suis intéressé par le fonctionnement du modèle d'E / S non bloquant à thread unique . Après avoir lu l'article Understanding-the-node-js-event-loop , je suis vraiment confus à ce sujet. Il a donné un exemple pour le modèle:
c.query(
'SELECT SLEEP(20);',
function (err, results, fields) {
if (err) {
throw err;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
c.end();
}
);
Que: Lorsqu'il y a deux requêtes A (vient en premier) et B car il n'y a qu'un seul thread, le programme côté serveur traitera la requête A en premier: faire des requêtes SQL est une instruction endormie qui signifie attente d'E / S. Et le programme est bloqué à l' I/Oattente et ne peut pas exécuter le code qui rend la page Web derrière. Le programme passera-t-il à la demande B pendant l'attente? À mon avis, en raison du modèle à fil unique, il n'y a aucun moyen de basculer une demande d'une autre. Mais le titre de l'exemple de code indique que tout fonctionne en parallèle, sauf votre code .
(PS, je ne sais pas si j'ai mal compris le code ou non car je n'ai jamais utilisé Node.) Comment Node passe-t-il de A à B pendant l'attente? Et pouvez-vous expliquer le modèle d'E / S monofilaire non bloquant de Node d'une manière simple? Je vous serais reconnaissant de bien vouloir m'aider. :)
