Jump to content

Модель памяти (программирование)

В вычислениях модель памяти описывает взаимодействие потоков через память и совместное использование ими данных .

История и значение

[ редактировать ]

Модель памяти позволяет компилятору выполнять множество важных оптимизаций. Оптимизации компилятора, такие как операторы перемещения слияния циклов в программе, которые могут влиять на порядок операций чтения и записи потенциально общих переменных . Изменения в порядке чтения и записи могут вызвать состояние гонки . Без модели памяти компилятор не может применять такие оптимизации к многопоточным программам вообще или только в особых случаях. Или для некоторых компиляторов не предполагается многопоточное выполнение (поэтому можно создать более оптимизированный код), что может привести к оптимизации, несовместимой с многопоточностью - это часто может привести к тонким ошибкам, которые не проявляются на ранних этапах тестирования. .

Поэтому современные языки программирования, такие как Java , реализуют модель памяти. Модель памяти определяет барьеры синхронизации , которые устанавливаются с помощью специальных, четко определенных операций синхронизации, таких как получение блокировки путем ввода синхронизированного блока или метода. Модель памяти предусматривает, что изменения значений общих переменных должны быть видны другим потокам только при достижении такого барьера синхронизации. Более того, все понятие состояния гонки определяется порядком операций относительно этих барьеров памяти. [1]

убедиться Эта семантика затем дает оптимизирующим компиляторам более высокую степень свободы при применении оптимизаций: компилятору необходимо только , что значения (потенциально общих) переменных на барьерах синхронизации гарантированно будут одинаковыми как в оптимизированном, так и в неоптимизированном коде. В частности, компилятор предполагает, что операторы переупорядочения в блоке кода, который не содержит барьера синхронизации, безопасны.

Большинство исследований в области моделей памяти вращаются вокруг:

  • Разработка модели памяти, которая обеспечивает максимальную степень свободы для оптимизации компилятора, в то же время давая достаточные гарантии в отношении программ без гонок и (что, возможно, более важно) в программах, содержащих гонки.
  • Доказательство оптимизации программы по отношению к такой модели памяти. корректности

Модель памяти Java была первой попыткой предоставить комплексную модель потоковой памяти для популярного языка программирования. [2] После того, как было установлено, что потоки не могут быть безопасно реализованы в виде библиотеки без наложения определенных ограничений на реализацию и, в частности, что в стандартах C и C++ ( C99 и C++03 ) отсутствуют необходимые ограничения, [3] [4] подкомитет по многопоточности C++ приступил к работе над подходящей моделью памяти; в 2005 году они представили рабочий документ C №1131. [5] чтобы привлечь Комитет C к своим усилиям. Окончательная версия предлагаемой модели памяти C++ n2429. [6] был принят в проект стандарта C++ на встрече в Коне в октябре 2007 года. [7] Затем модель памяти была включена в следующие стандарты C++ и C, C++11 и C11 . [8] [9] Язык программирования Rust унаследовал большую часть модели памяти C/C++. [10]

См. также

[ редактировать ]
  1. ^ Джереми Мэнсон и Брайан Гетц (февраль 2004 г.). «Часто задаваемые вопросы по JSR 133 (модель памяти Java)» . Проверено 18 октября 2010 г. Модель памяти Java описывает, какое поведение допустимо в многопоточном коде и как потоки могут взаимодействовать через память. Он описывает взаимосвязь между переменными в программе и низкоуровневыми деталями их хранения и извлечения из памяти или регистров в реальной компьютерной системе. Это делается таким образом, что его можно правильно реализовать с использованием широкого спектра аппаратного обеспечения и множества оптимизаций компилятора.
  2. ^ Гетц, Брайан (24 февраля 2004 г.). «Исправление модели памяти Java, часть 1» . ИБМ . Проверено 17 февраля 2008 г.
  3. ^ Бур, Питер А. (11 сентября 1995 г.). «Возможны ли библиотеки безопасного параллелизма?» (PDF) . Коммуникации АКМ . Проверено 12 мая 2015 г.
  4. ^ Бём, Ханс-Й. (12 ноября 2004 г.). «Потоки не могут быть реализованы как библиотека» (PDF) . Архивировано из оригинала (PDF) 30 мая 2017 г. Проверено 12 мая 2015 г.
  5. ^ Бем, Ганс ; Леа, Дуг ; Пью, Билл (26 августа 2005 г.). «Последствия обсуждения модели памяти C++ для языка C» (PDF) . www.open-std.org . Проверено 12 мая 2015 г.
  6. ^ «WG21/N2429: Модель памяти с параллелизмом (окончательная версия)» . www.open-std.org . 05.10.2007 . Проверено 12 мая 2015 г.
  7. ^ «N2480: Менее формальное объяснение предлагаемой модели параллельной памяти C++» . www.open-std.org . Проверено 12 мая 2015 г.
  8. ^ Александреску, Андрей; Бём, Ганс; Хенни, Кевлин; Хатчингс, Бен; Леа, Дуг; Пью, Билл (4 марта 2005 г.). «Модель памяти для многопоточного C++: проблемы» (PDF) . Проверено 24 апреля 2014 г. Библиотеки потоков C++ находятся в неловкой ситуации, когда они указывают (явно или неявно) модель расширенной памяти для C++, чтобы указать выполнение программы. Мы предлагаем интегрировать модель памяти, подходящую для многопоточного выполнения, в стандарт C++.
  9. ^ Бём, Ганс. «Модель потоков и памяти для C++» . Проверено 24 апреля 2014 г. Эта [ферма ссылок] предоставляет информацию, связанную с попытками прояснить значение многопоточных программ на C++ и предоставить некоторые стандартные API-интерфейсы, связанные с потоками, там, где они в настоящее время отсутствуют.
  10. ^ «Рустономикон, Атомика» . Проверено 8 июля 2024 г. Rust явно просто наследует модель памяти для атомарности из C++20.


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f512fe58ad6d3c1c4255db0291904c7c__1720450260
URL1:https://arc.ask3.ru/arc/aa/f5/7c/f512fe58ad6d3c1c4255db0291904c7c.html
Заголовок, (Title) документа по адресу, URL1:
Memory model (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)