Jump to content

JCSP

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

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

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

  • Условия гонки – общие переменные могут иметь неопределенное состояние, поскольку несколько потоков обращаются к ним одновременно без достаточной блокировки.
  • Тупиковая ситуация – два или более потоков заходят в тупик, когда они пытаются получить блокировки или другие ресурсы конфликтующим способом.
  • Livelock – похож на тупик, но приводит к бесконечной трате процессорного времени.
  • «Голодное состояние» — один или несколько потоков не работают, что ставит под угрозу ожидаемый результат программных алгоритмов.

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

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

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

Поскольку инкапсуляция данных осуществляется для каждого потока (на языке CSP для каждого процесса ), обычно нет необходимости в совместном использовании данных между потоками. Вместо этого связь между потоками происходит через четко определенные точки связи и места встречи. Преимущество состоит в том, что каждый поток в целом можно рассматривать как «однопоточный» объект во время его проектирования, что избавляет разработчика от неопределенности относительно того, следует ли и где использовать ключевое слово Synchronized 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 позволяет разрабатывать такое же параллельное программное обеспечение для роботов. В частности, роботами, выбранными для этого исследования, были Lego Mindstorms NXT , поскольку они могут запускать популярную виртуальную машину LeJOS NXJ, выполняющую исходный код Java. [3]

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

[ редактировать ]

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

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

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б Белапуркар, Абхиджит (21 июня 2005 г.). «CSP для Java-программистов» . IBM DeveloperWorks . Проверено 20 апреля 2007 г.
  2. ^ Уэлч, Питер; Мартин, Джереми (2000). Формальный анализ параллельных Java-систем . Коммуникационные архитектуры процессов 2000 (Отчет).
  3. ^ Джон Керридж; Алекс Панайотопулос; Патрик Лисмор (2008). «JCSPre: Robot Edition для управления роботами LEGO NXT» . Серия Concurrent Systems Engineering, том 66: Архитектура коммуникативных процессов, 2008 г. Книги IOS Press: 255–270. дои : 10.3233/978-1-58603-907-3-255 . Архивировано из оригинала 18 апреля 2010 г. {{cite journal}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6628e66f4aadcfeff5abf9e97adebace__1695567660
URL1:https://arc.ask3.ru/arc/aa/66/ce/6628e66f4aadcfeff5abf9e97adebace.html
Заголовок, (Title) документа по адресу, URL1:
JCSP - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)