Názor ke článku C++20: Jak se budí korutiny od Ondřej Novák - naivně implementovanou frontu+runtime pravděpodobně roznesou svým výkonem na...

  • 3. 11. 2022 17:14

    Ondřej Novák

    naivně implementovanou frontu+runtime pravděpodobně roznesou svým výkonem na kopytech

    Chtěl bych napsat _UKAŽ_. Trochu mi to tu zavání vírou a fundamentalismem, než nějakou technickou diskuzí. Co mi brání napsat frontu v C++ která se výkonově vyrovná? Jsem schopen napsat frontu rychleji jako prasárnu, nebo si C++ překladač poradí s výkonem i když použiju std::queue. Jen tak mimochodem, std::queue na tom s výkonem není vůbec špatně (oproti třeba implementaci rour ve Win32 :-D, které jsou realizované jako pole bajtů, které se šoupe pamětí - tedy stav ve WinXP, od té doby jsem byl v linuxu, tak nevím)

    Ale můj argument je trochu jinde. Drtivá většina korutin, ale i threadů nepotřebuje na předání výsledku frontu. To musí být obrovský výkonový overhead, když pro předání výsledku musím alokovat prostor pro výměnu dat. Zrovna v korutinách si mohu předat jen pointer i kdyby výsledkem byla třeba komplikovaná struktura nebo velký objekt.

    Zastropovaná fronta je problém. Jak řešíš její naplnění? Výjimkou. No a dál? Je to vlastně řešení? Nehledě na to, že si to můžeš řešit samozřejmě sám, zeptáš se na velikost fronty a pokud je moc velká, hodíš výjimku - třeba si můžeš ten objekt podědit a doimplementovat si to. Jasně, rozumím tomu, že zastropovaná fronta má jednodušší memory managment. Ale tam se získa promile výkonu, nestojí za optimalizaci - a vůbec, klidně mohu tu frontu udělat i genericky, jako že konkrétní implementaci fronty si dodá uživatel jak parametr šablony.