28 Punkte von xguru 2022-11-28 | 14 Kommentare | Auf WhatsApp teilen
  • 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

 
is9117 2022-12-01

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.

 
yuriwin 2022-11-30

Ist Netzwerk-I/O etwa kein I/O? lol

 
yuriwin 2022-11-30

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.

 
love7peace 2022-11-29

Alle Big-Data-Festplatten komplett durch NVMe-SSDs ersetzen? lol, was soll das bitte kosten ...

 
loblue 2022-11-28

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.

 
deokim 2022-11-28

Das ist ein Experiment mit falschen Voraussetzungen.

 
roxie 2022-11-29

Bitte um zusätzliche Erläuterung.

 
deokim 2022-12-05

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.

 
deokim 2022-12-05

Es könnte auch sein, dass mittels mmap nur 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

 
park2348190 2022-11-28

Ich bin gespannt, nach welchen Kriterien Big Data künftig bewertet wird.

 
nicewook 2022-11-28

Interessant.

 
jungmin1237 2022-11-28

Heute lerne ich wieder etwas dazu.

 
xguru 2022-11-28

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

 
nicewook 2022-11-28

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?