- Zwei Fragen, die in Vorstellungsgesprächen oft gestellt werden
- Schreiben Sie ein Programm, das Wörter in einer Textdatei zählt
- Wo liegt bei diesem Programm der Performance-Bottleneck?
- Oft antworten Leute „Lesen aus der Datei“, aber das stimmt heute nicht mehr
- Vor 10–20 Jahren war das so, aber Stand 2022 ist sequenzielles Lesen von der Festplatte sehr schnell (der Autor wusste das selbst nicht, bevor er es getestet hat)
- Der Bottleneck liegt beim Verarbeiten/Parsen der Eingabe und bei der Speicherzuweisung: in Wörter zerlegen, in Kleinbuchstaben umwandeln, Häufigkeiten mit einer Hash-Tabelle zählen usw.
- Beim Test mit einer 413-MB-Textdatei in Python/Go (eine Datei, in der die King-James-Bibel 100-mal aneinandergereiht wurde)
- Das Lesen dauert nur 0,1–0,2 Sekunden, die Verarbeitung jedoch 7 bis 2 Sekunden
- Fazit: Bei der Verarbeitung von „Big Data“ ist Festplatten-I/O möglicherweise nicht der Bottleneck
14 Kommentare
Selbst bei sequenziellem Zugriff gibt es je nach Sprache und Bibliothek Einflussfaktoren wie die Art der Nutzung der IO-Pipeline oder die Häufigkeit von Entwickleranfragen an die IO-API; deshalb halte ich die Aussage, dass I/O kein Bottleneck mehr sei, für eine Behauptung, die bestimmte Voraussetzungen braucht.
Ist Netzwerk-I/O etwa kein I/O? lol
Egal wie schnell es wird, I/O bleibt I/O. Deshalb gibt es beim Programmieren eigene Lösungen nur für den I/O-Teil.
Alle Big-Data-Festplatten komplett durch NVMe-SSDs ersetzen? lol, was soll das bitte kosten ...
Für jemanden wie mich, der sehr unter Festplatten-I/O leidet und an Aufgaben arbeitet, bei denen die Platten möglichst wenig bewegt werden müssen, ist das eine erstaunliche Geschichte.
Im Text ist von „sequentiell“ die Rede.
Wenn überhaupt keine Seeks stattfinden, ist das vielleicht nicht unbedingt falsch.
Das ist ein Experiment mit falschen Voraussetzungen.
Bitte um zusätzliche Erläuterung.
Ein Engpass ist an sich eine Frage relativer Zeit.
Es ist richtig, die CPU-Geschwindigkeit mit I/O zu vergleichen.
Nur weil I/O schneller geworden ist als früher, kann I/O nicht schneller sein als die CPU.
Es könnte auch sein, dass mittels
mmapnur in den virtuellen Speicher geladen wird und tatsächlich jedes Mal gelesen wird, wenn die CPU eine Berechnung ausführt.Auch die Kommunikation zwischen der CPU und allen Speichern (Register, Hauptspeicher, Festplatte) ist vollständig I/O.
https://stackoverflow.com/questions/5877797/how-does-mmap-work
Ich bin gespannt, nach welchen Kriterien Big Data künftig bewertet wird.
Interessant.
Heute lerne ich wieder etwas dazu.
Die URL im ersten Kommentar unter https://news.ycombinator.com/item?id=33751266 ist interessant.
Napkin Math (einfache Mathematik)
Sequenzielles I/O nähert sich offenbar fast der Geschwindigkeit des Arbeitsspeichers an..
Schon der Name „Napkin Math“ ist unglaublich charmant.
War das nicht so, dass Rob Pike bei der Entwicklung von UTF-8 etwas auf eine Serviette gekritzelt und es damit erklärt hat?