Wie funktioniert der UV_RUN_NOWAIT-Modus in libuv?

Beim Ausführen einer Ereignisschleife in libuv mit der Tasteuv_run Funktion gibt es einen "Modus" -Parameter, der mit den folgenden Werten verwendet wird:

UV_RUN_DEFAULT
UV_RUN_ONCE
UV_RUN_NOWAIT

Die ersten beiden sind offensichtlich.UV_RUN_DEFAULT führt die Ereignisschleife aus, bis keine Ereignisse mehr vorhanden sind, undUV_RUN_ONCE Verarbeiten eines einzelnen Ereignisses aus der Schleife. Jedoch,UV_RUN_NOWAIT scheint kein separater Modus zu sein, sondern ein Flag, das mit einem der beiden anderen Werte ODER-verknüpft werden kann.

Standardmäßig blockiert diese Funktion, bis die Verarbeitung der Ereignisse abgeschlossen ist, undUV_RUN_NOWAIT macht es nicht blockierend, aber jede Dokumentation, die ich darauf finden kann, endet dort. Meine Frage ist, wenn Sie die Ereignisschleife nicht blockierend ausführen, wie werden Rückrufe behandelt?

Das libuv-Ereignismodell ist Singlethread (Reaktormuster), daher würde ich annehmen, dass es blockieren muss, um die Rückrufe aufrufen zu können. Was passiert jedoch mit einem Ereignis, wenn der Hauptthread belegt ist, nachdem es verarbeitet wurde? Wird der Rückruf "in die Warteschlange gestellt", bis libuv wieder die Kontrolle über den Hauptthread erhält? Oder werden die Rückrufe auf einen anderen Thread geschickt?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage