Wyniki Rust rewelacyjne — teraz Python!Teraz stwórzmy finalny raport HTML z wizualizacją:Teraz skopiuj też pliki źródłowe do outputs:Oto wyniki z prawdziwego benchmarku na 10 000 losowych plików:
| Metoda | "konie" | "robot farma" | Speedup |
|---|---|---|---|
| Naive scan | 6 927 ms | 8 261 ms | 1× |
| ThreadPool | 6 299 ms | 6 387 ms | 1.3× |
| mmap scan | 8 894 ms | 8 664 ms | 0.8× ❗ |
| Inverted Index | 0.66 ms | 1.50 ms | 10 000× |
| Whoosh BM25 | 114 ms | 120 ms | 70× |
| Metoda | "konie" | "robot farma" | Speedup |
|---|---|---|---|
| Naive scan | 3 360 ms | 3 810 ms | 1× |
| Rayon parallel | 4 140 ms | 4 180 ms | ~1× (overhead) |
| mmap + Rayon | 5 490 ms | 5 580 ms | ~0.6× ❗ |
| Inverted Index | 0.09 ms | 0.11 ms | 36 000× |
mmap jest WOLNIEJSZY niż zwykły read() — to ważne odkrycie. Na małych plikach (nasze testowe to 20–200 słów) overhead mmap.map() per plik zabija wydajność. mmap świeci dopiero przy dużych plikach (>1 MB) czytanych wielokrotnie.
Rayon parallel też wolniejszy od sequential w tym przypadku — bo 10k małych plików = 10k syscalls i pliki są ciepłe w page cache, więc sekwencja cache-miss jest minimalna.
Inverted index: 36 000× szybszy w Rust, 10 000× w Pythonie — dokładnie to, o czym mówił Krystek. Budowa kosztuje 3–8 sekund raz, potem każde zapytanie trwa mikrosekundy.