Supposons que nous recevons données du socket TCP, et le traiter étape par étape pour obtenir le résultat . Chaque étape est implémentée comme une fonction qui charge le paramètre du précédent et renvoie le résultat au suivant. Nous enchaînons toutes ces fonctions en tant que chaîne de rappel et nommons chacune de ces fonctions f1f2 ... fn.comment rompre une longue chaîne de rappel dans libuv
Il n'y a pas de fonctions de bloc dans cette chaîne de rappel et chaque rappel s'exécute assez rapidement. Cependant, le temps d'exécution de la chaîne entière n'est pas négligeable, donc l'exécution de la chaîne entière en boucle unique n'est pas acceptée.
pour la chaîne simplement ces fonctions dans une chaîne de rappel, il fonctionnera:
data -> f1 -> f2 -> f3 -> f4 -> f5 ->... -> fn -> result
|------- single loop iteration -------|
Il est bon de briser cette chaîne en plusieurs sections, et chaque section exécuter en une seule itération de la boucle. Cela ressemble à:
data -> f1 -> f2 -> f3 -> f4 -> f5 ->... -> fn-1 -> fn -> result
| loop1 | |-- loop 2 --| |- loop m -|
Je sais que dans Twisted, il existe un différé() faire une telle tâche. Cependant, en libuv, comment le faire?
Je crois que vous pouvez utiliser uv_async – immibis