# find

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**:

---

## Wyniki benchmarku

### Python (5 metod)
| 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× |

### Rust (4 metody)
| 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×** |

---

## Kluczowe wnioski

**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.