If an operating system supports processes and threads (and honestly, I don't know of any systems in common use that don't), then it is possible for the application designer to separate the work among two or more threads. Each thread is independently dispatched, and several of them might find themselves running literally at the same time on different CPUs and/or cores.
A common situation would be the one used by the programs you mention. Part of the activity is known to be CPU-intensive, whereas part of it (handling the user-interface, schlepping files to-and-from a disk drive) is not. While one thread is idle, waiting for I/O, another thread might be profitably using the CPU.
|