Multi-tasking is all tasks, each a thread, coming from the same program seemingly executed at the same time. Each thread is an executable object, each with its own stacks, registers, and instruction counters. This simultaneous processing is deceptive as the CPU is actually flipping its activity very rapidly among each active thread.