> zásobník není vhodným kandidátem pro uložení stavu
Dovolím si nesouhlasit. Samozřejmě záleží na tom, jak se to udělá, ale jak Goroutiny, tak virtuální vlákna z JDK 19 ukládají stav normálně na zásobník.V okamžiku přepnutí se prostě jen změní hodnota SP.
Výhody jsou značné:vnení potřeba dvo\u "kategorií" funkcí - žádné async
, await
či suspend
(jako v Kotlinu). Vše se překládá úplně stejně. Zásobník je rychlejší než halda.
Přijde mi zvláštní, že po tom, co Go ukázalo, jak se ko-routiny mají dělat, a Java ukázala, že je lze přidat bez jakýchkoli změn jazyka, tak to ještě někdo zkouší se speciálními klíčovými slovy a s alokací na zásobníku!
Tak jistě mohlo se to udělat pomocí stackful korutin. Znamená alokace zásobníku po korutinu (nebo gorutinu?) Je to určité strategické rozhodnutí. Problém je, že nikdy dopředu nevíš, jak velký zásobník chceš alokovat. Takže nastřelíš nějakou hodnotu a doufáš, že to bude stačit.
Netuším, jak to go ma realizované. A netroufnu si říct, že to je lepší. C++ šlo cestou stackless, kdy nejsi povinný alokovat zásobník pro korutinu. Pokud tvá korutina dále volá normální funkce, pak se normálně používá zásobník vlákna, ve kterém zrovna běží. Samotná korutina zabírá jen to minimum co potřebuje k uložení stavu.
Některé embedded systémy navíc mají pouze jeden zásobník, alternativní zásobníky nelze používat, nelze jen tak změnit registr SP. Stackless korutiny v tomhle systému budou bez problému fungovat, stackful tam nezrealizuješ. To asi bylo hlavní kriterum pro rozhodování, co se do normy dostane. Co se týče stackful korutin z hlediska podpory OS, tak nikdo programátorovi nebrání použít makecontext/ConvertThreadToFiber dostupný už na úrovni C.
Javascript například má stackless korutiny.
TinyGo, verze pro embedded, řeší (k|g)orutiny takto: https://aykevl.nl/2019/02/tinygo-goroutines
Vnitřnostem moc nerozumím, ale jako uživatel jazyka mám jasného favorita.
Ikdyž, pro použití TinyGo bych se ale asi nerozhodl, ale to kvuli správě paměti, a to už je zase jiná kapitola.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 51 064×
Přečteno 23 939×
Přečteno 22 871×
Přečteno 20 953×
Přečteno 17 760×