A process can voluntarily yield the CPU either because it has completed, or because it is waiting for an event (such as data from a disk, a key press, or for a network packet).
A process can also involuntarily yield the CPU. This is referred to as preemption, and occurs when a higher priority process wants to use the CPU. Preemption can have a particularly negative impact on performance, and constant preemption can lead to a state known as thrashing. This problem occurs when processes are constantly preempted and no process ever gets to run completely.
To check voluntary and involuntary preemption occurring on a single process, check the contents of the
/proc/PID/status, where PID is the PID of the process. The following command checks the preemption of the process with PID 1000:
grep voluntary /proc/1000/statusvoluntary_ctxt_switches: 194529 nonvoluntary_ctxt_switches: 195338
Changing the priority of a task can help reduce involuntary preemption.