Nejde mi o nic takového. Jde mi o kontext vykonávaní programu. Stav programu je často definován pozicí v programu a callstackem, tedy seznamem volajících podprogramů.
A teď si představte, že můžete mezi těmito callstacky přepínat, ale nejde o žádnou emulaci vláken. Jde o programátorskou techniku, kdy třeba napíšete iterátor vy procházíte normálně třeba v cyklu prvky nějaké kolekce, a přitom ten iterátor ty prvky prochází rekuzivně ve vlastním callstacku a při každým next() se přejde z jednoho callstacku do druhého a zase zpět.
Prostě jako by to byly dvě vlákna, akorát synchroně bez nutnosti je zastavovat a synchronizovat.