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ключевое слово игнорируется и предполагается последовательная обработка.

Смотрите также

Ссылки

внешние ссылки