Multiprogramming, multithreading, multiprocessing, and multitasking are techniques used in modern operating systems to improve efficiency. Multiprogramming allows multiple processes to reside in memory simultaneously. This improves CPU utilization by enabling context switching between processes during input/output wait times. Multithreading further increases concurrency by allowing multiple threads to be executed within a process. Multiprocessing uses multiple CPUs to concurrently run multiple processes and threads. Multitasking provides an environment where users can run multiple applications simultaneously.