Wenn eine Ereignisschleife in libuv Ausführen des uv_run
Funktion verwenden, gibt es einen „Modus“ Parameter, der mit den folgenden Werten verwendet wird:Wie funktioniert der UV_RUN_NOWAIT Modus in libuv?
UV_RUN_DEFAULT
UV_RUN_ONCE
UV_RUN_NOWAIT
Die ersten beiden sind offensichtlich. UV_RUN_DEFAULT
führt die Ereignisschleife aus, bis keine weiteren Ereignisse mehr auftreten, und UV_RUN_ONCE
verarbeitet ein einzelnes Ereignis aus der Schleife. UV_RUN_NOWAIT
scheint jedoch kein separater Modus zu sein, sondern ein Flag, das mit einem der anderen beiden Werte verknüpft werden kann.
Standardmäßig blockiert diese Funktion, bis die Ereignisse verarbeitet werden, und UV_RUN_NOWAIT
macht es nonblocking, aber jede Dokumentation, die ich dort finde, endet dort. Meine Frage ist, wie werden Callbacks behandelt, wenn Sie die Ereignisschleife nonblocking ausführen? Das Libuv-Ereignismodell ist ein single-threaded (reactor pattern), also würde ich annehmen, dass es blockieren muss, um die Callbacks aufrufen zu können, aber wenn der Hauptthread belegt ist, was passiert mit einem Event, nachdem es verarbeitet wurde ? Wird der Callback "in die Warteschlange gestellt", bis libuv wieder die Kontrolle über den Haupt-Thread hat? Oder werden die Rückrufe auf einem anderen Thread ausgelöst?
Diese Dokumentation (die in uv.h) ist alt und manchmal inakzeptabel. Die neue Dokumentation befindet sich unter docs.libuv.org: http://docs.libuv.org/en/v1.x/loop.html#cuv_run – saghul