Gibt es einen Posix-Weg, um sicherzustellen, zwei Dateien nacheinander gespült werden, ohne zu blockieren?

StackOverflow https://stackoverflow.com/questions/2772134

Frage

In meinem Programm, halte ich zwei Dateien zum Schreiben zu öffnen, eine Content-Datei, Datenblocks enthält, und eine Index-Datei, eine Karte enthält, über welche Datenblocks bisher geschrieben wurden.

Ich möchte sie beide auf einer Disc spülen, so performant wie möglich, mit der einzigen Einschränkung, dass die Blöcke in der Datendatei, bevor die entsprechenden Blöcke in der Karte-Datei geschrieben werden muss (natürlich).

Der Haken ist, dass ich vermeiden möchte blockiert I.E. Tut eine fsync, sowohl für die Latenzzeit und Durchsatz-Gründe.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich glaube nicht, dass Sie diese einfach in einem einzigen Ausführungspfad tun. Sie müssen Fsync die Schreib haben auf der Festplatte garantiert - und das wird für die Schreib warten müssen.

Ich vermute, dass es möglich ist, (aber nicht einfach ist), dies zu tun, indem Sie die Schreibaufgabe zu einem separaten Thread oder Prozess zu delegieren. Generieren Sie die Daten in der vorhandenen Programm und ‚schreiben‘ es auf den zweiten Thread / Prozess Jedes Verfahren, das Aussehen sinnvoll verwenden. Dies kann nicht blockierend sein. Der zweite Thread schreiben würde dann keine neue Daten an die Daten auf Ihre Content-Datei, dann fsync, dann die Index-Datei schreiben, dann überprüfen Sie die neuen Daten erneut. Key Design-Entscheidungen beziehen sich auf, wie Sie die beiden Ausführungspfade trennen, wie Sie zwischen ihnen zu kommunizieren, und wenn Sie die Schreib zurück zum Hauptprogramm berichten müssen. Dies könnte noch hat Latenz und Durchsatz Probleme, aber das ist ein Teil der Kosten für die Auswahl der Index-Datei und Inhalt-Datei synchron zu haben. Zumindest wäre es eine Chance bekommen geleistete Arbeit während des Wartens auf dem Datenträger.

Es könnte sich lohnen, schauen, um zu sehen, ob dies auch so verkapselt ist in der Quelle von einem der Transaktionsdatenbanken für Sie nützlich zu sein. Sie könnten auch die Sync-Option untersuchen, wenn Sie das Dateisystem für die Inhalt-Datei einbinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top