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á?
Hlavně v klidu. Bylo to myšleno jako inspirace. V C++ samozřejmě je možné napsat rychlou frontu.
Ale můj argument je trochu jinde. Drtivá většina korutin, ale i threadů nepotřebuje na předání výsledku frontu.
Samozřejmě. Proto taky třeba ty gorutiny mají normální návratovné hodnoty. Fronta/kanál se použije pouze pokud to je potřeba.
Zastropovaná fronta je problém. Jak řešíš její naplnění? Výjimkou.
No to rozhodně ne. Jednak zmiňované jazyky výjimky ani nemají a jednak tím by se úplně popřel smysl zastropované fronty. Korutina, která se snaží zapsat do plné fronty je uspána, dokud se ve frontě neudělá místo. Tzn. když máš třeba skupinu producerů nějakých dat a nějaký consumer [nebo několik], obvykle je vhodné použít na to MPSC [MPMC] frontu se stropem, protože když z nějakého důvodu dojde třeba ke zpomalení consumerů, nechceš, aby fronta začala bobnat v paměti do závratných objemů. (Samozřejmě je možné tohle signalizovat producerům i nějak bokem / mimo frontu, ale často právě přes frontu to je dostačující a celkem elegantní řešení.)
Jasně, rozumím tomu, že zastropovaná fronta má jednodušší memory managment.
Není jednoduší, je to stejné. Zastropovaná neznamená konstantní velikost / konstantní alokaci, ta fronta je stále alokovaná úplně stejně dynamicky jako nezastropovaná, pouze je tam navíc ta garance, že nepřekročí nikdy určitou velikost (nevyleze mi z paměti, když se zaseknout consumeři).
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 690×
Přečteno 23 715×
Přečteno 22 754×
Přečteno 20 740×
Přečteno 17 637×