JCSP - JCSP

JCSP это реализация Связь последовательных процессов (CSP) для Язык программирования Java.[1]

Несмотря на то что CSP это математическая система, JCSP не требует глубоких математических навыков, позволяя программистам создавать хорошо работающее программное обеспечение, просто следуя простым правилам.

Обзор

Существует четыре способа неконтролируемой ошибки многопоточных программ:[1]

  • условия гонки - общие переменные могут иметь неопределенное состояние, потому что несколько потоков обращаются к ним одновременно без достаточной блокировки;
  • тупик - два или более потока заходят в тупик, когда они пытаются получить блокировки или другие ресурсы конфликтующим образом;
  • лайвлок - аналогично тупиковой ситуации, но приводит к бесконечной потере процессорного времени;
  • голодание - одному или нескольким потокам не удается выполнить какую-либо работу, что ставит под угрозу предполагаемый результат программных алгоритмов.

Как правило, невозможно доказать отсутствие этих четырех опасностей простым тщательным тестированием. Хотя тщательное тестирование необходимо, этого недостаточно. Вместо этого необходимо иметь дизайн, демонстрирующий, что этих четырех опасностей не существует. CSP позволяет делать это с помощью математики, а JCSP позволяет делать это прагматично в программах Java.

Преимущество математической основы состоит в том, что могут быть получены более надежные гарантии правильного поведения, чем это было бы возможно с помощью обычных для этого случая разработка. К счастью, JCSP не заставляет своих пользователей применять математический подход самостоятельно, но позволяет им извлекать выгоду из математики, лежащей в основе библиотеки.

Обратите внимание, что термин CSP процесс используется в основном как синоним нить на языке Java; а процесс в CSP - это легкая исполнительная единица, которая взаимодействует с внешним миром через события и является активным компонентом, инкапсулирующим структуры данных, с которыми он работает.

Поскольку инкапсуляция данных осуществляется по потокам (по процесс на языке CSP), обычно нет необходимости полагаться на обмен данными между потоками. Вместо этого связь между потоками происходит через четко определенные точки связи и рандеву. Преимущество состоит в том, что каждый поток в целом можно рассматривать как «однопоточный» объект во время его проектирования, избавляя разработчика от неопределенности относительно того, следует ли и где использовать Java синхронизированный ключевое слово, и в то же время гарантируя свободу от условий гонки. JCSP обеспечивает четкие принципы проектирования межпотоковой связи таким образом, чтобы было доказано отсутствие тупиковых ситуаций.

Существует явное сходство между некоторыми классами в стандартном Java API (java.util.concurrent) и некоторые в JCSP. JCSP канал классы похожи на BlockingQueue. Есть одно важное отличие: JCSP также предоставляет Альтернатива класс, позволяющий выбирать между входами; эта возможность отсутствует в стандартном API Java. Чередование - одна из основных концепций, которые CSP использует для моделирования событий в реальном мире.

Альтернатива была доказана правильная работа путем исчерпывающего математического анализа его пространства состояний, что гарантирует, что оно никогда не может само по себе вызвать тупик.[2] Таким образом, он олицетворяет надежность JCSP с точки зрения математической основы.

Сетевой уровень

Потому что TCP сокеты могут быть сконструированы так, чтобы вести себя как каналы блокировки в смысле CSP, можно распределять процессы JCSP по нескольким компьютерам. Это достигается с помощью расширения JCSP Net, которое предоставляет каналы с семантикой CSP с использованием TCP. Поскольку CSP является композиционным, с точки зрения поведения не имеет значения, расположены ли процессы совместно или распределены. Единственная разница в относительной производительности. Таким образом, можно, например, разработать приложение на одном сервере, а затем сравнить многопроцессорную версию этого же приложения с целью оптимизации производительности.

Другие версии

Издание робота

JCSP re - это сильно сокращенная версия пакетов JCSP, разработанная примерно в 2008 г. Университет Напьера Эдинбург профессором Джоном Керриджем, Алексом Панайотопулосом и Патриком Лисмором. Исследования JCSP для робототехнических сред и JCSP для мобильных сред являются активной областью исследований в Эдинбургском университете Нэпьера. Рабочая реализация «JCSP re» позволяет разрабатывать одно и то же параллельное программное обеспечение для роботов. В частности, роботы, нацеленные на это исследование, были Лего Mindstorms NXT потому что они могут запускать популярные LeJOS Виртуальная машина NXJ, выполняющая исходный код Java.[3]

Использование JCSP из других языков

JCSP - это, по сути, чистый Java API (хотя существует альтернатива для исследований, в которой используется C-CSP расширение JVM). Таким образом, он в принципе отлично подходит для параллелизма в Scala и Groovy приложения, а также Java.

Таким образом, JCSP может предоставить альтернативу Scala актерская модель. JCSP использует синхронизированную связь, а субъекты используют буферизованную (асинхронную) связь, каждая из которых имеет свои преимущества при определенных обстоятельствах. JCSP позволяет буферизовать свои каналы, что позволяет легко имитировать модель актора; обратное неверно.

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

Рекомендации

  1. ^ а б Абхиджит Белапуркар (21 июня 2005 г.). «CSP для Java-программистов». IBM developerWorks. Получено 2007-04-20.
  2. ^ Питер Уэлч, Джереми Мартин (2000). «Формальный анализ параллельных систем Java». Коммуникационные архитектуры процессов 2000.
  3. ^ Джон Керридж, Алекс Панайотопулос, Патрик Лисмор. «JCSPre: издание для роботов для управления роботами LEGO NXT». Серии изданий Concurrent Systems Engineering, том 66: Архитектуры процессов взаимодействия, 2008 г.. Книги IOS Press: 255–270. Дои:10.3233/978-1-58603-907-3-255. Архивировано 18 апреля 2010 года.CS1 maint: использует параметр авторов (связь) CS1 maint: BOT: статус исходного URL-адреса неизвестен (связь)

внешняя ссылка