Re[7]: mmap асинхронная запись
От: VVB16 Россия  
Дата: 01.08.14 09:58
Оценка:
Здравствуйте, valuea, Вы писали:

W>>Погоди-ка. Так ты всё-таки хочешь чтобы программа переживала внезапные сбои вроде пропадания электроэнергии, kernel panic, выхода из строя разного оборудования, вот это вот всё?

W>>То есть управление порядком записи на диск нужно лишь для повышения вероятности, что после сбоя ОС (вроде внезапной перезагрузки) там окажется консинстентная структура. Если с этим нужно бороться, то да, синхронная синхронизация будет нужна.
V>Именно, но при этом не хотелось-бы вынуждать вызвающую сторону дожидаться окончания записи данных на диск, тем более при каждом новом вызове запись произоводится поочередно в различные участки файла, которые между собой не пересекаются. При этом не очень хочется создавать отдельный поток (дабы не держать поток вызывающей стороны), который занимался бы такой последовательной синхронизацией, а как раз таки переложить эту задачу "на плечи" ОС, что то типа асинхронную записи, но с выполнением условия последовательности. Если без отдельного потока не получитя, насколько я понимаю нужно будет копать в сторону kqueue (да, таки исключительно под FreeBSD).

Конкретно в случае FreeBSD msync вообще не приводит к записи на диск с любыми ключами.
Только fsync заставит ОС сбросить все страницы на диск и только с его помощью можно обеспечить последовательность записи в данном случае.
И даже munmap не гарантирует записи, кстати.
Утешением может служить то, что в случае FreeBSD fsync сбрасывает именно грязные страницы одного указанного файла, а не как в Win...
Собственно при сбросе страниц на диск будут записаны данные на момент выполнения этой операции, т.к. в VM нет версионности, а страницы виртуальной памяти вообще прибиты намертво к страницам физической.
На самом деле ситуация такая — если нужны гарантии на выполнение транзакции, надо ждать ее завершения. Если не ждать — нет гарантий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.