CPU parking is a power saving feature that allows taking an idle cpu core offline so it stops consuming power. When there is demand for the cpu again, the cpu is unparked.
Before a cpu can be parked, all threads on the cpu must either be unbound from the cpu or parked. Presumably if the cpu is to be parked, other cpus are available and idle, so running threads can be unbound from the cpu core and moved to other cores. But if a thread is also idle (possibly waiting for I/O to complete or a timeout or a kernel thread just waiting for work to do), rather than do the expensive operation of unbinding a thread and moving it to another core, it can just be parked too.
When the kernel parks a thread, it wakes up the thread and tells it to park itself. A kernel thread gets a chance to do any clean up it wants including releasing resources that might otherwise deadlock, and then calls parkme which handles some race conditions and then marks the thread as parked. Once all the threads on a core are migrated or parked, the kernel can then park the cpu.
Presumably, unparking a thread (and the cpu it is on) would be faster than waiting to be scheduled on a busy cpu, or binding it to another already idle cpu (which might have been parked itself anyway).
Note that a few special kernel threads are dedicated to the core they are bound to, so would always be parked rather than unbound.