Each channel has an associated jobset on Hydra (Nix CI) that is a collection of individual jobs. A job roughly corresponds to building a particular package, which itself may depend on other packages built by other jobs.
Before a channel can update, its associated jobset must be finished building, though the building of some jobs may fail.
As long as certain special jobs -- unstable for nixpkgs, and tested for nixos -- build successfully, the channel can update. The role of these special jobs is to ensure that essential functionality is present on each channel update.
There are two major differences between those jobsets:
For a channel to be updated two conditions need to be satisfied:
The nixos.org server has a cronjob for which nixos-channel-scripts are executed and poll for the newest jobset that satisfies the above two conditions and trigger a channel update.
Once triggered, release files such as ISOs are copied. For the NixOS channel command-not-found index is generated, which can take some time since it has to fetch all packages.
nixpkgs is quickly updated since none of the above needs to happen once a channel update is triggered.
See NixOS status page.