Wie Javascript ist ein single-threaded, wie libuv behandelt, wenn es mir gelingt, zwei Anfragen parallel zu machen? ZB: Array von Versprechen machen und letzteres lösenWas passiert in libuv, wenn Sie parallele Anfragen machen
Antwort
Ich vermute, was Sie wirklich fragen ist, wie libv8 zwei asynchrone Anfragen, die "im Flug" zur gleichen Zeit sind, behandelt. Da es sich bei Javascript um einen einzelnen Thread handelt, können Sie sie nicht gleichzeitig starten. Einer wird gestartet, dann kann Ihr JS mehr starten und den zweiten starten. Sie werden beide gleichzeitig "in Bearbeitung" sein.
Zunächst einmal wird die Bibliothek in Nodejs in der Regel libuv, nicht libv8 genannt. Hier ist the doc for libuv.
Die Antwort für libuv ist, dass es von der Art der asynchronen Operation abhängt. Hier ist ein Diagramm, aus dem libuv site:
Disk I/O in libuv verwendet native Threads über einen Thread-Pool. Ein systemeigener Thread führt jede Datenträger-E/A-Operation aus und schließt sie ab. Anschließend fügt er ein Ereignis in die Ereigniswarteschlange von nodejs ein. Wenn nodejs verfügbar ist, kann er dieses Ereignis aus der Ereigniswarteschlange abrufen und den für das asynchrone I registrierten Rückruf aufrufen/O-Betrieb. Diese Funktionalität stammt ursprünglich aus libeo, ist aber augenscheinlich eine eigene Implementierung.
Netzwerkoperationen in libuv verwenden native OS async-Funktionen wie epoll, kqueue und IOCP.
Danke, das habe ich getan. Ja, ich bin neu auf der Plattform –
technisch machen Sie die Anfrage nicht parallel, man kommt zuerst. dieser beginnt zuerst, aber er hört ab oder sucht nach einem, wenn es fertig ist, und dann nach dem anderen und vor und zurück, bis einer zuerst fertig ist.
Danke für Ihre Antwort @Johnathan Ralls, ich erwartete das gleiche, es dauert eins nach dem anderen. aber ich habe von einem Typen gehört, als er etwas mit Spawn gemacht hat. Ich habe damals nicht ganz verstanden. –
- 1. Was passiert mit Anfragen, wenn Tomcat stoppt?
- 2. Was passiert, wenn NSTimer in
- 3. Was passiert, wenn veröffentlicht
- 4. Was passiert, wenn Sie ein Programm ausführen?
- 5. Einsetzen von Flask, parallele Anfragen
- 6. Was passiert, wenn make_shared
- 7. Was passiert, wenn Sie Socket.EndConnect nie aufrufen?
- 8. Was passiert, wenn Sie ng serve ausführen?
- 9. ASP.NET: Wie parallele Anfragen verarbeitet werden
- 10. Was passiert mit parse4cn1, wenn sie parse.com herunterfahren?
- 11. was genau passiert, wenn `enableProdMode()`
- 12. HTTP-Anfragen in Qt machen
- 13. Was passiert, wenn php.ini fehlt?
- 14. Was passiert, wenn Kernel delayed_work
- 15. Was passiert eigentlich, wenn ApplicationCommands.Close
- 16. Was passiert, wenn Öffnen fehlschlägt?
- 17. Was passiert, wenn update_all fehlschlägt?
- 18. Was passiert, wenn kfree Funktion
- 19. Was passiert, wenn Sie Elternkonstruktor in PHP nicht explizit aufrufen?
- 20. Was passiert, wenn Sie in C++ keinen Wert zurückgeben?
- 21. Was passiert, wenn Sie diese in C löschen ++
- 22. Was passiert, wenn Sie `if Schlüssel in dict` aufrufen
- 23. Was passiert, wenn Sie eine URL in den Browser eingeben
- 24. Was passiert, wenn Sie ein Merkmal in PHP "Require"?
- 25. Was passiert, wenn Sie undefined in JavaScript zuweisen?
- 26. Was passiert, wenn ein Ereignis ausgelöst wird
- 27. Was passiert, wenn ich eine AliasProperty anbinde?
- 28. Was passiert, wenn Sie einer rvalue-Referenz eine Literalkonstante zuweisen?
- 29. Was passiert, wenn wir networkstream.write() tun?
- 30. Ist libuv thread sicher?
Sie sind auch auf der OS-Ebene asynchron. Es ist besser, hier von * gleichzeitigen * Anfragen zu sprechen, nicht von "parallelen". – Bergi
Danke @Bergi für das richtige setzen –