6 Stimmen

Java-Optimierung auf hoher Ebene

Es gibt viele Fragen, Antworten und Meinungen darüber, wie man Java auf niedriger Ebene mit for-, while- und do-while-Schleifen optimieren kann und ob dies überhaupt notwendig ist.

Meine Frage bezieht sich eher auf eine Optimierung auf hoher Ebene im Design. Nehmen wir an, ich muss das Folgende tun:

für eine gegebene Zeichenketteneingabe das Vorkommen jedes Buchstabens in der Zeichenkette zählen.

dies ist kein großes Problem, wenn die Zeichenfolge ein paar Sätze ist, aber was, wenn wir stattdessen das Auftreten jedes Wort in einer 900.000-Wort-Datei zählen wollen. bauen Schleifen verschwendet nur Zeit.

Welches ist also das übergeordnete Entwurfsmuster, das auf diese Art von Problem angewendet werden kann?

Ich denke, mein Hauptargument ist, dass ich dazu neige, Schleifen zu verwenden, um viele Probleme zu lösen, und dass ich mir die Verwendung von Schleifen abgewöhnen möchte.

vielen Dank im Voraus

Sam

p.s. Wenn möglich, können Sie einen Pseudocode für die Lösung des 900.000-Wörter-Problems erstellen. Ich verstehe Code besser als Englisch, und ich nehme an, dass dies für die meisten Besucher dieser Website gilt.

0voto

Rostislav Matl Punkte 3959

Sie müssen Folgendes verwenden teile und herrsche Ansatz und vermeiden einen Wettlauf um Ressourcen. Hierfür gibt es verschiedene Ansätze und/oder Implementierungen. Die Idee ist die gleiche - Arbeitsteilung und Parallelisierung der Verarbeitung.

Auf einer einzelnen Maschine können Sie Verarbeitung von Datenpaketen in separaten Threads Wenn sich die Chunks auf derselben Festplatte befinden, verlangsamen sich die Abläufe allerdings erheblich. Mehr Threads zu haben bedeutet, mehr Kontextwechsel zu haben. Für den Durchsatz ist es IMHO besser, eine kleinere Anzahl von Threads zu haben und sie beschäftigt zu halten.

Sie können die Verarbeitung in Stufen aufteilen und mit SEDA oder etwas Ähnliches und mit wirklich großen Daten machen Sie für map-reduce - nur mit den Kosten für die Verteilung der Daten auf die Cluster rechnen.

Ich würde mich freuen, wenn mir jemand eine andere weit verbreitete API nennen könnte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X