De multe ori, aplicatiile au nevoie de mult timp pentru a rezolva o sarcina (descarcarea unui fisier, printare, generarea unui raport etc), timp in care programul nu poate raspunde unei alte actiuni a utilizatorului. Pentru a face ca o aplicatie sa indeplineasca o sarcina si sa poata primi si altele in acelasi timp, sunt folosite firele de executie multiple (multiple threads).
Intr-un program liniar se executa o singura linie de cod, se asteapta pentru completare si apoi se continua cu urmatoarea linie de cod. Programul nu poate raspunde actiunii unui utilizator in acest timp si chiar in cazul mai multor procesoare, va fi folosit doar unul singur, limitand performanta, datorita programarii single-thread.