Coroutines aneb thready bez threadu
Pavel Kankovsky
peak na kerberos.troja.mff.cuni.cz
Úterý Říjen 6 20:51:08 CEST 1998
On Tue, 6 Oct 1998, Martin Mares wrote:
> to jeden zasadni problem: neumim to napsat portabilne -- samotne prepnuti
> zasobniku musi byt v assembleru plus program predpoklada, ze vi, kterym
> smerem zasobnik roste a podobne veci.
Rekl bych, ze kreativni vyuziti funkce sigaltstack() by mohlo pomoci.
> Threadove knihovny nejsou pro coroutiny zrovna dobrym resenim -- uvedomte
> si, ze kazdy thread musi mit svuj vlastni zasobnik, coz coroutiny nemusi.
> Pokud je coroutin nekolik stovek, je uz rozdil dosti znat.
Nemusi? A kde si korutina uchovava svuj vlastni stav? Spis je rozdil
v tom, jak je vhodne zasobnik implementovat.
> Ne, setjmp() a longjmp() pouzit nejde, jelikoz longjmp() znici vsechny
> stavy ulozene po setjmp() prislusnem k tomuto stavu.
Hm? longjmp() samotny nic nenici, problem je v tom, ze takovy stav muze
ukazovat na oblast zasobniku, ktera byla (nebo v blizke dobe bude)
prepsana necim jinym
> alloca() ci ekvivalentni mechanismy, nemel by to byt zase takovy problem -- v
> podstate staci zmenit standardni prolog a epilog funkce, aby primo nealokoval
> misto na zasobniku a aby misto toho zavolal knihovni funkci, ktera alokuje
> misto z haldy a _nezapnout_ -fomit-frame-pointer, cimz by se mely lokalni
A co navratove adresy? Krome toho uplne zruseni zasobniku jako takoveho
zpusobi nepouzitelnost vsech knihoven a take to bude nejspis o poznani
pomalejsi.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"You can't be truly paranoid unless you're sure they have already got you."
Další informace o konferenci Linux