Názor ke článku Asynchroní parsování JSONu v C++20 od Ondřej Novák - I když jsou všechny znaky k dispozici, ten...

  • 5. 5. 2024 21:51

    Ondřej Novák

    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?