2010-04-24 10 views

Antwort

49

Atomic im Allgemeinen bedeutet die Operation kann nicht unterbrochen werden wird abgeschlossen oder haben keine Wirkung. Beim Schreiben von Dateien wird dies durch Schreiben in eine temporäre Datei und anschließendes Ersetzen des Originals durch das temporäre beim Beenden des Schreibvorgangs erreicht.

Ein Absturz während des Schreibens einer atomaren Datei bedeutet, dass das Original nicht geändert wird und es eine Morning-Datei gibt, die gelöscht werden kann. Ein Absturz beim normalen Schreiben würde bedeuten, dass eine erwartete gute Datei beschädigt ist.

Leistungsmäßig sind die Kosten minimal. Während des Schreibvorgangs haben Sie zwei Kopien einer Datei. Die Dateiersetzung ist eine sehr einfache Operation auf Dateisystemebene.

Edit: Dank zneak

+6

Atom bedeutet eher, dass die Operation entweder ganz oder gar nicht stattfindet. Es kann unterbrochen oder angehalten oder fortgesetzt werden, es ändert nichts an dem Zustand des Systems, bis es abgeschlossen ist. Die Schlussfolgerung bleibt jedoch dieselbe. – zneak

+0

Ich würde dies nicht als "Sie werden zwei Kopien einer Datei" sagen, da es zu leicht zu lesen ist, dass zwei Kopien der exakt gleichen Daten bedeutet, was nicht passiert ist. –

0

Dateisysteme nicht zurückgreifen müssen, um Zyklen für die Atom schreibt, nicht zu schreiben/umbenennen. Dateisysteme mit Sperrsemantik ermöglichen es Ihnen, Teile oder die Gesamtheit einer Datei zu 'sperren' oder in einigen Fällen sogar Dinge wie das Anhängen an eine Datei auszuführen, um mit der Atomarität zu helfen.

@Randy, beide Annahmen über Fragmentierung sind wahrscheinlich falsch. Bei den meisten Dateisystemen führt das Schreiben einer ganzen Datei und deren Schließen zu einer weniger fragmentierten Datei, und das Schreiben einer großen Datei in einem einzigen Schreibvorgang führt definitiv zu einer besseren Verwendung großer Blöcke. Wenn Sie meinen, dass die Dateiblöcke eher auf der Festplatte "kriechen", hängt das von den Layouteinstellungen in Ihrem Dateisystem ab. Wenn Sie in Flash schreiben, möchten Sie wahrscheinlich, dass sich das Dateisystem als eine Art Selbstnivellierung der Schreibvorgänge über den verfügbaren Speicher bewegt.

0

Schreiben atomar dauert mehr Schritte - zusätzlich Hilfsdatei erstellt wird. NSString Klasse Reference erklärt:

Wenn JA, wird der Empfänger auf eine Hilfsdatei geschrieben, und dann die Hilfsdatei wird auf Pfad umbenannt. Wenn NEIN, wird der Empfänger direkt in Pfad geschrieben. Die Option YES garantiert, dass der Pfad, falls er unter all vorhanden ist, nicht beschädigt wird, selbst wenn das System während des Schreibens unter abstürzen sollte. Hier

ist das Beispiel im Fall von plists:

[array writeToFile:path atomically:YES]; 

wenn "JA" ist, dann wird pList aktualisiert nur einmal, auch wenn Sie den Code mehrmals in XCode laufen,

[array writeToFile:path atomically:NO]; 

wenn "NEIN" es aktualisiert wird so viele, wie Sie den gleichen Code (wiederholte Aktualisierung) ausführen.

+0

haben keine Ahnung, warum einige Leute die Antwort ohne Erklärungen abgelehnt haben. –

+1

Ich denke, weil sie glauben, dass Sie sich nicht auf die undokumentierten Feinheiten einer API verlassen sollten, um ernsthafte Programmierfehler zu überwinden. – malhal

+0

Danke für den Kommentar, ich erklärte es mehr. –

Verwandte Themen