Here it says that with -p btrfs-receivesend first creates snapshot of parent subvolume and then modifies that snapshot accordingly to data stream from btrfs-send. With -c option btrfs-receive creates blank subvolume and modifies it, creating reflinks for unchanged files. The difference is the size of metadata btrfs-send needs to transfer. In case of -c option all metadata is transfered, in case of -p option -- some metadata.
I tested this with snapshots of subvolume (250G, 310k files) with these results:
# time btrfs send -p server-20181031-1746 server-20181225-1144 -f /mnt/parent.diff At subvol server-20181225-1144 real 3m12,618s Size of parent.diff is 6418364996 bytes
# time btrfs send -c server-20181031-1746 server-20181225-1144 -f /mnt/clone.diff At subvol server-20181225-1144 real 3m17,435s Size of parent.diff is 6418364996 bytes
So, in my case there is almost no difference.
I don't think btrfs-send can generate streams for multiple subvolumes in one command.