Polling (or programmed I/O) is when the CPU repeatedly checks (in a loop) a device status to see if it is ready, then performs the transfer. It wastes CPU cycles while waiting. Interrupt-driven I/O is when the device issues an interrupt when ready, and the CPU handles the request via ISR (Interrupt Service Routine). Interrupts reduce wasteful CPU polling but add overhead due to context switching, interrupt latency and complexity. Polling may be suitable for very fast or predictable devices. Interrupts are better for devices with unpredictable latency or that allow CPU to work on other tasks. In interviews, discuss trade-offs: timing, latency, complexity, context switch overhead, CPU utilisation.