ПОИСК Статьи Чертежи Таблицы Конструкции управления параллельными процессами в языках программирования из "Компьютерная поддержка принятия решений " В разд. 5.1 было показано, что агент может рассматриваться как программный модуль, который способен обновлять структуру данных и даже знаний, посредством которых он выполняет свои функции и проявляет свою активность. В распределенных мульти-агентных системах агенты могут рассматриваться как процессы или как составляющие процессов. [c.311] Процесс или поток - это последовательность операций при выполнении программы (или ее части) и данные, используемые этими операциями. Процесс (или поток) является единицей диспетчеризации и потребления ресурсов системы. [c.311] Для многопроцессорных вычислительных систем с общей и раздельной памятью такое описание параллелизма было вполне достаточно. С появлением вычислительных сетей и объектно-ориентированного программирования перечисленных выше простых средств стало уже недостаточно. Возникли новые требования. Ярким выразителем этих новых требований стал язык Java [5.20], в котором они нашли свое, кажется, наиболее полное отражение. [c.312] Почти все эти эпитеты, характеризующие Jav y, справедливы. [c.312] Доступ к подобным наборам данных осуществляется через множество интерфейсов сети. Интерфейсы управляют тем, кто и какой тип доступа получает к данным и какие операции могут быть выполнены над ними. [c.312] Таким образом, класс - это набор элементов данных, который включает в себя свои собственные методы (подпрограммы) их обработки. Вместо передачи данных для обработки внешней процедуре посылается сообщение элементу данных класса, приказывая ему вызвать один из его методов, обрабатывающих данные. Заметим в скобках, что это, возможно, самая трудная для восприятия идея для тех, кто имеет опыт процедурного программирования, поскольку она требует полной перемены представления о том, как разрабатывать программы. Но это похоже на реальный мир объект (класс) имеет свойства (элементы данных) и поведение (методы их обработки, которые реагируют на события). [c.312] Заметим, что класс может содержать в себе другие классы - подклассы . [c.313] Каждый класс имеет свое имя (идентификатор). В нашем примере таким идентификатором является Preferen eRelation. Под этим именем он должен быть сгенерирован, активирован, переведен в криогенное состояние (см. рис.5.1) и ликвидирован. По этому же имени к нему могут обращаться другие агенты, и он может посылать сообщения другим агентам (классам) со своим именем агента-отправителя. Как всякий класс (агент), он может инициировать выполнение новых модулей-агентов. [c.313] В языке программирования Java главный поток и порожденные им потоки различаются синтаксическим описанием. В описании главного (порождающего) потока присутствует отличающее его служебное слово main в заголовке потока. [c.313] Заметим, что это, конечно, не программа, а только схема программы, показывающая принцип описания потоков в Jav e. [c.314] Функция синхронизации процессов, происходящих в вычислительных системах, возникла с появлением мультипрограммирования в связи с необходимостью управления разделяемыми ресурсами. Особенно большое значение синхронизация приобрела в связи с появлением распределенных многопроцессорных систем. [c.314] Синхронизация обеспечивает заданную дисциплину доступа к требуемым ресурсам. Методам синхронизации посвящено очень большое число работ. Как правило, механизмы синхронизации основаны на концепции взаимного исключения доступа к ресурсу во времени, т.е. они исключают одновременный доступ к разделяемому ресурсу нескольких процессов. Например, в большинстве случаев нельзя допускать, чтобы одновременно один процесс записывал информацию в массив, а другой считывал эту информацию. [c.315] Операция Р на семафоре S выполняется следующим образом. Проверяется значение S. Если S 0, то S=S-1 и операция Р считается завершенной. Если 8=0, то значение S не изменяется и операция Р не завершается до тех пор, пока при помощи операции V значение S не станет больше 0. [c.315] Вернуться к основной статье