Зачем кому-то использовать Memory Mapped File в режиме PRIVATE? - PullRequest
1 голос
/ 01 апреля 2012

В документации ничего не сказано, кроме:

Private: изменения, внесенные в результирующий буфер, не будут распространяться на файл и не будут видны другим программам, которые отобразили тот же файл;вместо этого они будут вызывать создание закрытых копий измененных частей буфера.(MapMode.PRIVATE)

В какой ситуации это желательно и какие у него преимущества?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Если вы выполняете генетический алгоритм эксперимент с большим набором данных, вы можете запустить восемь или более клиентов - по одному на ядро, два на ядро ​​и т. Д. - для работы сте же исходные данные, вносите изменения в данные при выполнении вычисления, а затем сохраняйте только «конечные результаты» начального начального числа для генератора случайных чисел и «счет», по которому измеряется алгоритм.

Промежуточные результаты могут не иметь никакого значения, и вы не хотели бы, чтобы кто-либо из клиентов когда-либо видел промежуточные результаты от других клиентов или портил исходные начальные данные.

1 голос
/ 01 апреля 2012

В какой ситуации это желательно и какими преимуществами оно обладает?

Используется, когда вы хотите внести временные изменения в отображенные данные, которые не должны сохраняться, и должныневидимы для других приложений, которые могли бы сопоставить файл.

В таком случае использования приложение может либо явно скопировать содержимое файла в byte[], либо оно может сопоставить файл в PRIVATE mode

Ожидается, что JVM + OS позаботится о копировании данных в режиме PRIVATE более эффективным способом, чем код приложения Java.Например, ОС JVM + может использовать собственную подсистему виртуальной памяти для копирования данных на сопоставленной странице виртуальной машины при первом попытке приложения обновить соответствующую область своего буфера.

Способ реализации MapMode.PRIVATE зависит от платформы.Если вам необходимо узнать подробности, обратитесь к исходному коду вашей JVM и к исходному коду операционной системы.

...