process.nextTick() không thuộc phase nào của event loop: callback vào nextTick queue và chạy ngay khi đoạn code đồng bộ hiện tại kết thúc, trước cả Promise microtask. setImmediate() thì thuộc check phase.
Thứ tự ưu tiên đầy đủ: code đồng bộ → nextTick queue → Promise microtask → các phase của event loop (timers → poll → check/setImmediate).
Nguy cơ starvation: process.nextTick() gọi đệ quy sẽ chiếm event loop mãi, I/O callback không bao giờ tới lượt. Chính docs của Node.js khuyên dùng setImmediate() thay cho nextTick trong đa số trường hợp.
Khi nào nextTick mới hợp lý: phát event ngay sau khi constructor return (để listener kịp đăng ký), hoặc propagate lỗi bất đồng bộ trong một API buộc phải async nhất quán.
Khi nào dùng setImmediate: cắt nhỏ một khối tính toán nặng qua nhiều vòng mà vẫn chừa khe cho I/O chen vào.