Multitasking allows a program to manage more than one thing at the same time. Concurrency refers to this ability to handle multiple tasks by interleaving their execution, even on a single processor core.

In Ruby Concurrency Mechanisms, threads provide concurrency where one thread actively executes Ruby code while another thread waits on an O operation. Although Ruby threads use native operating system threads, the Global Interpreter Lock ensures only a single thread runs Ruby code at any given moment.

This is distinct from Parallelism, where multiple tasks execute simultaneously on multiple CPU cores. In Ruby, true parallelism requires Ractors, as each Ractor maintains its own GIL.

The key distinction: concurrency is about dealing with multiple things at once (task switching), while parallelism is about doing multiple things at once (simultaneous execution).