SCOOP (программное обеспечение) - SCOOP (software)
SCOOP ( Простое параллельное объектно-ориентированное программирование ) - это модель параллелизма, разработанная для языка программирования Eiffel , задуманная создателем и дизайнером Eiffel Бертраном Мейером .
SCOOP определяет способ написания объектно-ориентированной программы без концепции потоков, блокировок или других типичных методов мультипрограммирования . Это позволяет компилятору или среде выполнения оптимизировать степень параллелизма, а также устранить типичные недостатки конструкции, такие как тупик.
Модель была впервые разработана в начале 1990-х и опубликована в 1993 году в Коммуникациях ACM . Обновленная версия была описана в главе 30 книги « Конструирование объектно-ориентированного программного обеспечения» . В 1995 году Eiffel Software разработала прототип реализации. В статье Комптона и Уокера дается обзор SCOOP и описывается еще одна ранняя реализация. Ниеналтовски, Арслан и Мейер опубликовали описание модели по состоянию на 2003 год. Работа над SCOOP продолжалась на кафедре программной инженерии в ETH Zurich . SCOOP стал доступен как стандартная часть EiffelStudio в начале 2011 года.
Технический обзор
SCOOP позволяет объявлять ссылки на определенные объекты как отдельные . В приведенном ниже коде сущность local_inventory
объявляется как отдельный тип путем указания ключевого слова языка Eiffel separate
в объявлении.
local_inventory: separate INVENTORY
Отдельный объект может обрабатываться процессором SCOOP, который отличается от процессора, обрабатывающего ссылающийся объект. Процессор SCOOP - это абстрактное понятие автономного потока управления, который обрабатывает выполнение операций над одним или несколькими объектами. Процессоры SCOOP не зависят от основных механизмов параллелизма, таких как потоки процессора , многоядерные процессоры и распределенные компьютерные системы .
В дополнение к концепции разделенности, SCOOP использует принципы проектирования по контракту как часть стратегии SCOOP для синхронизации доступа к разделяемым отдельным ресурсам. Например, предварительным условием для потребителя, желающего получить доступ к элементу в приведенном выше примере инвентаризации, может быть то, что такой элемент в настоящее время существует. Это могло бы быть выражено в контракте на функцию класса, INVENTORY
который возвращает элемент.
item: PRODUCT
-- Current item
require
inventory_has_item: has_item
При традиционной последовательной обработке клиент, намеревающийся позвонить, local_inventory.item
будет нести ответственность за выполнение предварительного условия local_inventory.has_item
перед выполнением вызова. Если вызов item
был выполнен в состоянии, в котором has_item
не было удержания, вызывающий вызовет исключение нарушения предварительного условия.
В присутствии SCOOP и с учетом обособленности local_inventory
проверка has_item
перед вызовом item
будет ненадежной. Это связано с тем, что состояние local_inventory
могло быть изменено запросами от других процессоров SCOOP между временем, когда была сделана проверка, и временем, когда она item
могла быть вызвана.
В результате, когда SCOOP включен, предварительное условие has_item
преобразуется из условия корректности , которое вызовет исключение в случае нарушения, в состояние ожидания . Условие ожидания вызовет item
задержку выполнения до тех пор, пока не будет задержано has_item
. В реализации Eiffel Software, если SCOOP не включен, separate
ключевое слово игнорируется и предполагается последовательная обработка.
Смотрите также
Ссылки
внешние ссылки
- Электронная документация Eiffel Software для SCOOP .
- Страница исследования SCOOP в ETH Zurich .