Cтраница 1
Блокировка вычислений и знаки отмены определены в Лиспе как макросы чтения. Способы блокировки и ее отмены в конце концов сводятся к иерархическим вызовам функции CONS. Изучить способы формирования выражений можно, задавая интерпретатору выражения, в которых внутри QUOTE содержится обратная блокировка. [1]
Примеры SDF-графов. [2] |
Случаи блокировки вычислений не исчерпываются лишь дедлока-ми и ливлоками. Чтобы это проиллюстрировать, прибегнем к модели, которая уже частично рассматривалась в § 1.2. Это SDF-графы. На рис. 2.5, а приведены примеры SDF-графов, вершины которых, напомним, обозначают акторы, а маркировка дуг - число производимых и потребляемых ими токенов. Случай, представленный на рис. 2.5, а, соответствует последовательности гнезд циклов. [3]
Пример иерархии наследования типов данных. [4] |
Поясним связь проблем недетерминизма и блокировки вычислений на следующих примерах. Дуги а, 6, с, d соответствуют передаче токенов. [5]
Получение ответа на вопрос о возможности блокировки вычислений, когда метаоператоры т, тз ( см. рис. 2.11, г) потребляют любой из выходных токенов метаоператора mi, требует специальных методов анализа, которые рассматриваются в гл. То же касается и вопроса, как преобразовать исходную модель обработки ( см., например, рис. 2.11, в), чтобы исключить блокировки. [6]
Заметьте, что первый аргумент использован без блокировки вычисления. [7]
Внутри обратно блокированного выражения можно по желанию локально отменять блокировку вычислений, иными словами внутри некоторого подвыражения опять осуществлять вычисления. Отсюда происходит и название обратной блокировки. [8]
О передаче параметров и поддержании окружения вычислений заботятся лямбда-механизм и механизм блокировки вычислений. Порядок следования определений функций в тексте программы не имеет никакого значения с точки зрения логики программы. Порядок вычисления в функциональном программировании непосредственно не выражен. Ход выполнения программы и необходимое для нее время и память проявятся лишь во время ее выполнения. [9]
Если на этот вопрос можно ответить да или нет, то проблема блокировок вычислений для предложенной модели разрешима. Иными словами, блокировки не возникают, если на бесконечном потоке входных сообщений при любом возможном развитии процессов для каждой альтернативы существует такая наименьшая неподвижная точка ( число сообщений), что композиция процессов может вырабатывать бесконечное число выходных сообщений. При этом учитываются все возможные сценарии вычислений с учетом недетерминизма процессов, которые обмениваются порциями данных произвольных размеров. Методы обнаружения и предотвращения блокировок вычислений описываются в гл. [10]
Рассмотрим подробнее, каким образом с помощью М - сетей можно интерпретировать возникновение или отсутствие блокировок вычислений при буферном обмене сообщениями. [11]
К проблеме блокировки вычислений. [12] |
При тех же исходных условиях случай, показанный на рис. 2.11, в, соответствует блокировке вычислений: на любой последовательности токенов в ( абс) метаоператор тз может быть инициирован трижды компонентом с и один раз компонентом d сообщения ( с, d), поскольку для срабатывания метаоператора т2 необходимо два токена. Процесс же может начаться лишь при наличии всех необходимых входных данных. [13]
Примеры гамаков в М - сетях. [14] |
Теперь рассмотрим примеры противоположной ситуации, когда, несмотря на отсутствие ориентированных циклов в М - сетях, блокировка вычислений может возникать. Заметим, что возникновение дедлоков, как правило, связывается с наличием контуров в соответствующих графовых моделях обработки. Наличие контура в таком графе свидетельствует о возможности возникновения дедлока. Однако блокировки вычислений могут быть обусловлены и другими причинами, например взаимозависимостью параллельных путей передачи данных от одного процесса-производителя. Этот эффект был замечен при изучении некоторых акторных моделей, в частности SDF. [15]