Pojęcie współprogramu ma dwie odmienne definicje. Obie definicje zgodnie stwierdzają, że współprogram cechuje się posiadaniem ciągu instrukcji do wykonania i ponadto możliwością zawieszania wykonywania jednego współprogramu A i przenoszenia wykonywania do innego współprogramu B. W szczególności można wznowić pracę zawieszonego współprogramu A, a wykonywanie będzie podjęte w miejscu, w którym zostało zawieszone. Tym co różni obie definicje jest zdolność współpracy z rekurencyjnymi procedurami (W językach programowania funkcyjnego koncepcja współprogramu istnieje pod postacią kontynuacji – pojęcia wprowadzonego niemal równocześnie ze współprogramami).

Obiekt współprogramu jest quasi-wątkiem. Tak jak wątek ma ciąg instrukcji do wykonania, w odróżnieniu od wątków obiekty współprogramów nie działają równolegle. Jest niezmiennikiem systemu współprogramów to, że w każdej chwili, dokładnie jeden obiekt współprogramu wykonuje swoje instrukcje: