nextTick vs setImmediate, explication visuelle

Je suis très confus sur les différences entre les nextTick et setImmediate. J'ai lu toute la documentation à leur sujet sur internet mais je ne comprends toujours pas comment ils fonctionnent.

Exemples:

function log(n) { console.log(n); }

setImmediate

setImmediate(function() {
  setImmediate(function() {
    log(1);
    setImmediate(function() { log(2); });
    setImmediate(function() { log(3); });
  });
  setImmediate(function() {
    log(4);
    setImmediate(function() { log(5); });
    setImmediate(function() { log(6); });
  });
});

//1 2 3 4 5 6

nextTick

process.nextTick(function() {
  process.nextTick(function() {
    log(1);
    process.nextTick(function() { log(2); });
    process.nextTick(function() { log(3); });
  });
  process.nextTick(function() {
    log(4);
    process.nextTick(function() { log(5); });
    process.nextTick(function() { log(6); });
  });
});

//1 4 2 3 5 6

Pourquoi ces résultats? Veuillez expliquer avec un visuel ou très facile de suivre les explications. Même le nœud de base devs ne sont pas d'accord sur la façon dont nextTick et setImmediate doit être compris par les gens.

Sources:

  • Grande question. C'est une excellente façon d'illustrer les différences.
  • Le résultat est le même (1 4 2 3 5 6) pour les deux exécutions (Nœud v5.6.0)
  • Sage et d'aider à la question!
  • à la fois produit de la même sortie
  • Regardez l'année, il y a 5 ans! Beaucoup de choses ont changé.