У чому полягає філософія такого підходу?
Ефективність (краще використання характеристик диска) та продуктивність (дозволяє додатку продовжуватися відразу після запису).
Чому дані не записуються відразу?
Основна перевага полягає в тому, що ОС є вільною для переупорядкування та об'єднання операцій запису безперервного запису, щоб поліпшити використання їх пропускної здатності (менше операцій та менше бажань). Жорсткі диски ефективніші, коли вимагається невелика кількість великих операцій, тоді як додаткам, як правило, потрібна велика кількість невеликих операцій. Інша чітка оптимізація полягає в тому, що ОС також може видалити всі, крім останнього запису, коли один і той же блок записується кілька разів за короткий проміжок часу, або навіть видалити деякі записи всі разом, якщо зафіксований файл тим часом був видалений.
Ці асинхронні операції записи виконуються післяwrite
того, як системний виклик повертається. Це друга і найпопулярніша перевага користувача. Асинхронний запис прискорює програми, оскільки вони вільні продовжувати свою роботу, не чекаючи, коли дані дійсно будуть на диску. Такий же тип буферизації / кешування також реалізований для операцій зчитування, де останні або часто читаються блоки зберігаються в пам'яті, а не знову читаються з диска.
Чи немає небезпеки, що запис вийде з ладу через помилку вводу-виводу?
Не обов'язково. Це залежить від використовуваної файлової системи та надмірності на місці. Помилка вводу / виводу може бути нешкідливою, якщо дані можна зберегти в іншому місці. Сучасні файлові системи, такі як ZFS, самостійно лікують блоки поганих дисків. Зауважте також, що помилки вводу / виводу не руйнують сучасні ОС. Якщо вони трапляються під час доступу до даних, вони просто повідомляються про це. Якщо вони трапляються під час доступу до структурних метаданих та ставлять під загрозу файлову систему, вони можуть бути перероблені лише для читання або зробити їх недоступними.
Існує також невеликий ризик втрати даних у разі аварії ОС, відключення живлення або відмови обладнання. Це причина, коли програми, які повинні бути на 100% впевнені, що дані є на диску (наприклад, бази даних / фінансові програми), роблять менш ефективними, але більш захищеними синхронними записами. Для пом'якшення впливу на продуктивність багато додатків все ще використовують асинхронні записи, але з часом синхронізують їх, коли користувач явно зберігає файл (наприклад, vim, текстові процесори.)
З іншого боку, дуже велика більшість користувачів та додатків не потребують і не дбають про безпеку, яку забезпечують синхронні записи. Якщо відбувається збій або відключення електроенергії, єдиний ризик - це втратити в гіршому випадку останні 30 секунд даних. Якщо немає фінансової транзакції або чогось подібного, що би означало витрати, набагато більші за 30 секунд свого часу, величезний приріст продуктивності (що не є ілюзією, але дуже реальним) асинхронний запис дозволяє значною мірою перевершити ризик.
Нарешті, синхронного запису недостатньо для захисту даних, записаних у будь-якому випадку. Якщо вашій програмі дійсно потрібно бути впевненим, що їхні дані не можуть бути втрачені, що б не трапилося, потрібно створити реплікацію даних на декількох дисках і в різних географічних місцях, щоб протистояти катастрофам, таким як пожежа, повені тощо.