СОВОК (программное обеспечение)
SCOOP ( Simple Concurrent Object Oriented Programming ) — модель параллелизма, разработанная для языка программирования Eiffel , задуманная создателем и дизайнером Eiffel Бертраном Мейером .
SCOOP определяет способ написания объектно-ориентированной программы без концепции потоков, блокировок или других типичных мультипрограммирования методов . Это позволяет компилятору или среде выполнения оптимизировать объем параллелизма, а также устранить типичные недостатки проектирования, такие как взаимоблокировки.
Модель была впервые разработана в начале 1990-х годов и опубликована в 1993 году в журнале Communications of the ACM. [1] Обновленная версия была описана в главе 30 книги Object-Oriented Software Construction . [2] Реализация прототипа была разработана в 1995 году компанией Eiffel Software. Статья Комптона и Уокера [3] предоставляет обзор SCOOP и описывает еще одну раннюю реализацию. Ниенальтовский, Арслан и Мейер опубликовали описание модели по состоянию на 2003 год. [4] Работа над SCOOP продолжалась на кафедре программной инженерии ETH Zurich . [5] SCOOP стал доступен как стандартная часть EiffelStudio в начале 2011 года. [6]
Технический обзор [ править ]
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
ключевое слово игнорируется и предполагается последовательная обработка.
См. также [ править ]
Ссылки [ править ]
- ^ Бертран Мейер: Систематическое параллельное объектно-ориентированное программирование , в Communications of the ACM, 36, 9, сентябрь 1993 г., стр. 56-80, также доступно в Интернете .
- ^ Бертран Мейер: Объектно-ориентированное создание программного обеспечения , 2-е издание, Прентис-Холл, 1997 г.
- ^ Комптон, Майкл; Уокер, Ричард (2002). «Система выполнения для SCOOP» . Журнал объектных технологий . 1 (3): 119–157. дои : 10.5381/jot.2002.1.3.a8 .
- ^ Ниенальтовский, П.; Арслан, В.; Мейер, Б. (2003). «Параллельное объектно-ориентированное программирование в .NET» (PDF) . Труды IEE — Программное обеспечение . 150 (5): 308. doi : 10.1049/ip-sen:20030992 .
- ^ ETH Zurich, кафедра разработки программного обеспечения: страница проекта SCOOP
- ^ Eiffel Software: SCOOP: Параллелизм для Eiffel
Внешние ссылки [ править ]
- Онлайн-документация Eiffel Software для SCOOP .
- Страница исследования SCOOP в ETH Zurich .