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