Povim ti, proc tak banalni operace a tolik otazek a debat kolem toho. Koukas na vysledek abstraction leaku v unixu. Spatnej design proste. Lidi tady bud obhajujou, ze lip to napsat neslo nebo
ochcavky jako epoll prezentujou jako nejaky super reseni, pritom je to akorat hozeni rucniku do ringu a mas si to vyresit low level sam.
Podobna ochcavka je predani callbacku. Ztratis tim traceback a udelas si z kodu spagety. To mohli rovnou nechat goto protoze callbacky jsou prakticky totez.
Jiny reseni je vyhodit planovac vlaken operacniho systemu do rite a udelat si ho v programovacim jazyce znova. Viz async knihovny, Go, apod.
Je doufam poznat ze je to akorat sada hacku jeden za druhym.
Problem je v tom ze 'nemuzes' pouzivat libovolne vlaken, protoze jsou tezkopadny. To je ta designova chyba, protoze tezkopadny bejt vubec nemusi. Viz Go a async v ruznych jazycich. Vlakno by mela bejt absrakce na urovni treba funkce. Dokazes si predstavit, ze muzes pouzit treba jenom 10 funkci na program, protoze to tehdy nejaky jelito zprasilo v designu OS a udelalo je tezkopadny, jen aby to bylo o chlup rychlejsi?
Kdyby to nekoho zajimalo tak chyba je v zakladni datovy strukture vlaken - stacku. Mel se pouzit stack stacku aka cactus stack, kdy jednoduse vyhodis kus stacku do padous a nahradis ho jinym kdyz menis vlakna v planovaci. Vysledkem jsou delimited continuations, ale to je mimo scope teto lekce.
Aspon by mohli ve skolach zminit ze design unixu je deravej shit at si lidi nemysli jaky jsou bedny kdyz ho nauci pouzivat.