Quando si esegue un ciclo di eventi in libuv utilizzando la funzione uv_run
, c'è un parametro "mode" che viene utilizzato con i seguenti valori:Come funziona la modalità UV_RUN_NOWAIT in libuv?
UV_RUN_DEFAULT
UV_RUN_ONCE
UV_RUN_NOWAIT
I primi due sono evidenti. UV_RUN_DEFAULT
esegue il ciclo di eventi fino a quando non ci sono più eventi e UV_RUN_ONCE
elaborando un singolo evento dal ciclo. Tuttavia, UV_RUN_NOWAIT
non sembra essere una modalità separata, ma piuttosto un flag che può essere OR con uno degli altri due valori.
Per impostazione predefinita, questa funzione si blocca fino a quando gli eventi non vengono elaborati e UV_RUN_NOWAIT
lo rende non bloccante, ma la documentazione che riesco a trovare finisce lì. La mia domanda è, se si esegue il ciclo di eventi non bloccante, come vengono gestiti i callback?
Il modello di eventi libuv è thread singolo (modello reattore), quindi vi impegna deve bloccare per essere in grado di chiamare i callback, ma se il filo principale è occupato, cosa succede ad un evento dopo averlo elaborato ? La callback sarà "accodata" fino a quando libuv non riprenderà il controllo del thread principale? O i callback saranno spediti su un altro thread?
Questa documentazione (quella in uv.h) è obsoleta e talvolta non accurata. La nuova documentazione è su docs.libuv.org: http://docs.libuv.org/en/v1.x/loop.html#c.uv_run – saghul