I když jsou všechny znaky k dispozici, ten kód tohle neví. Asi nejvíc je vidět v tom výpisu, kde musí testovat zda nenarazil na konec. Průměrně vychází 28 taktů na znak, což docela odpovídá tomu, jakou režii má co_await. Ale třeba se to dá ještě nějak zoptimalizovat, nevím. Nechci se pouštět do asm.
Není například možné načítat znaky po větších blocích, protože stream může skončit kdykoliv v prostřed bloku. Žádný "padding" tam nikdo nedá(jak to řeší třeba simdjson - v tom je třeba zásadní optimalizace).
Cílem příspěvku ale bylo ukázat možné řešení korutinou. Ono 100MB není zase málo, protože zkus si to představit. I když budeš mít server na 1Gb síti, pak tvá propustnost je velice optimisticky právě oněch 100MB/s. Optimisticky. Na levném VPS bude mnohem nižší. A klient třeba na internetu může mít nakonec ještě méně. Takže ten kód se stejně bude většinu času flákat, ale nebude zabírat víc paměti.
Jak krásný nepoměr je vidět právě v tom, že načtení všech dat trvá 4s, a parsování 3.5s. Nepoměr na síti může být mnohem větší. K čemu mít G/s, když několik desítek sekund trvám na upload?
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 434×
Přečteno 24 169×
Přečteno 22 973×
Přečteno 21 229×
Přečteno 17 933×