Jen se hloupe zeptam: kdyz zavolam co_await fetch(url), tak kdo vykona tu funkci fetch? Musim mit nejake separatni vlastnorucne managovane vlakno, ktere kouka do nejakeho seznamu korutin a ty pousti? Nebo se nejake vlakno pro moji korutinu objevi nejak automagicky? A nebo tomu vubec nerozumim?
funkce fetch() musí být napsaná tak, aby vrátila objekt awaitera. Tam začíná celá magie. Představ si, že to není fetch (moc složitý) ale třeba recv (ze socketu)
co_await postupně zavolá tři funkce awaiteraTakže tvá odpověď na otázku. Záleží na implementaci. Pokud daná funkce něco řeší asynchroně, musí si k tomu zařídit nějaká vlákna a postavit vlastní asynchroní systém. Korutině je to jedno, ta komunikuje s tím mechanismem přes awaitera, což je takový zástupce toho mechanismu. Výhodou je, že dokud celá operace je stále v procesu, instance awaitera je po celou dobu k dispozici. Jakmile je operace kompletní, awaiter je zdestruován
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 50 602×
Přečteno 23 674×
Přečteno 22 664×
Přečteno 20 632×
Přečteno 17 622×