2017-03-04 6 views
2

Ich bin nur verwirrt über die "synchronisierte/asynchronisierte I/O" und "blockierende/nicht blockierende I/O". Ich nehme an, dass "synchronisierte E/A" immer eine Art blockierender E/A wie Lesen/Schreiben bedeutet, sie blockieren Operationen, also sind sie "synchronisierte E/A".Bedeutet "synchronisierte E/A" immer "blockierende E/A"?

Bitte bitte helfen zu korrigieren!

Antwort

2

"Asynchronous" oder "non-blocking" E/A sind tatsächlich auch effektiv. Wenn wir jedoch Linux-Terminologie verwenden, unterscheiden sich "blocking" und "synchronized" I/O.

"Blocking" sagt Ihnen nur, dass der Systemaufruf wird nicht zurückkehren, bis der Kernel die Daten aufgezeichnet hat ... irgendwo. Es gibt keine Garantie dafür, dass diese Aufzeichnung bei einem unerwarteten Stromausfall oder einem Hardwarefehler persistent ist. es kann zum Beispiel einfach ein Write-Ahead-Cache sein - so kann Ihr blockierender Aufruf an einem Punkt zurückkehren, an dem andere Prozesse, die zu der Zeit ausgeführt werden, den Schreibvorgang sehen können, aber der Schreibvorgang bei einem Stromausfall verloren gehen würde.

"Synchronized" in der O_SYNC Sinn sagt Ihnen, dass der Systemaufruf wird nicht zurück, bis die Daten tatsächlich auf Hardware persistent bleiben.


Also: Alle synchronisierten E/A blockiert, aber nicht alle blockieren E/A ist synchronisiert.

Verwandte Themen