JCSP
JCSPJCSP는 프로그래밍 언어 [1]Java를 위한 통신 순차 프로세스(CSP)의 구현입니다.
CSP는 수학적인 시스템이지만 JCSP는 상세한 수학 기술을 필요로 하지 않기 때문에 프로그래머가 간단한 규칙을 따르는 것으로 동작 좋은 소프트웨어를 얻을 수 있습니다.
개요
멀티 스레드 프로그램이 테스트 [1]없이 실패할 수 있는 방법은 다음 4가지가 있습니다.
- 레이스 조건 – 여러 스레드가 충분한 잠금 없이 동시에 액세스하기 때문에 공유 변수가 불확정 상태가 될 수 있습니다.
- 교착 상태 – 두 개 이상의 스레드가 충돌하는 방식으로 잠금 또는 기타 리소스를 획득하려고 하면 교착 상태에 빠집니다.
- Livelock – 교착상태와 비슷하지만 CPU 시간 낭비가 끊이지 않습니다.
- 기아 – 1개 또는 여러 스레드가 작동하지 않아 소프트웨어 알고리즘의 의도된 결과를 손상시킵니다.
일반적으로 이들 4가지 위험의 부재를 단순히 엄격한 시험만으로는 증명할 수 없다.엄격한 테스트가 필요하지만 충분하지 않습니다.대신 이 네 가지 위험이 존재하지 않음을 증명할 수 있는 설계가 필요하다.CSP를 사용하면 수학을 사용하여 실행할 수 있으며, JCSP를 사용하면 Java 프로그램에서 실용적으로 실행할 수 있습니다.
수학에서 기초의 이점은 기존의 임시 개발에서 가능한 것보다 더 강력한 올바른 행동 보장을 생산할 수 있다는 것이다.다행히 JCSP는 사용자 스스로 수학적 접근 방식을 채택하도록 강요하지 않고 라이브러리를 뒷받침하는 수학으로부터 혜택을 받을 수 있도록 한다.
CSP 용어 프로세스는 기본적으로 Java 용어로 쓰레드의 동의어로 사용됩니다.CSP 내의 프로세스는 이벤트를 통해 외부와 상호작용하는 경량 실행 단위이며, CSP가 동작하는 데이터 구조를 캡슐화하는 액티브컴포넌트입니다
데이터의 캡슐화는 스레드 단위(CSP 용어로는 프로세스 단위)이기 때문에 일반적으로 스레드 간의 데이터 공유에 의존하지 않습니다.대신 스레드 간의 결합은 잘 정의된 통신 포인트와 랑데부를 통해 이루어집니다.장점은 각 스레드가 설계 중에 "단일 스레드" 엔티티로 광범위하게 간주될 수 있기 때문에 개발자는 Java의 동기화된 키워드를 사용할지, 어디에 사용할지에 대한 불확실성을 피할 수 있으며 동시에 레이스 조건으로부터 자유로워질 수 있습니다.JCSP는 스레드 간 통신을 설계하기 위한 명확한 원칙을 제공합니다.이것에 의해, 실증적으로 교착 상태가 되지 않게 됩니다.
표준 Java API의 일부 클래스 간에는 분명한 유사성이 있습니다.java.util.concurrent) 및 JCSP. JCSP 채널클래스의 일부는 BlockingQueue와 비슷합니다.한 가지 중요한 차이가 있습니다.JCSP는 입력 간의 선택을 가능하게 하는 Alternative 클래스도 제공합니다.이 기능은 표준 Java API에는 없습니다.대체는 CSP가 실제 세계에서 이벤트를 모델링하기 위해 사용하는 핵심 개념 중 하나입니다.
대안은 상태 공간에 대한 철저한 수학적 분석을 통해 올바르게 작동한다는 것이 입증되었으며, 그 자체로 [2]교착 상태를 야기할 수 없다는 것을 보장했습니다.이와 같이, JCSP의 수학적 근거로부터 신뢰성의 전형이다.
네트워킹 레이어
CSP의 의미에서는 Transmission Control Protocol(TCP) 소켓이 블로킹채널로 동작하도록 구성할 수 있기 때문에 JCSP 프로세스를 여러 컴퓨터에 분산시킬 수 있습니다.이는 TCP를 사용하여 CSP 시멘틱스를 가진 채널을 제공하는 JCSP Net 확장을 사용하여 실현됩니다.CSP는 구성 요소이기 때문에 프로세스가 같은 위치에 있는지 또는 분산되어 있는지 여부는 행동 측면에서 중요하지 않습니다.유일한 차이점은 상대적인 성능입니다.따라서 예를 들어 단일 서버에서 애플리케이션을 개발한 후 성능을 최적화하기 위해 동일한 애플리케이션의 멀티프로세서 버전을 비교할 수 있습니다.
기타 버전
로봇 에디션
JCSP re는 2008년경 Napier University Edinburgh에서 Jon Kerridge, Alex Panayotopoulos 및 Patrick Lismore 교수에 의해 개발된 JCSP 패키지의 대폭 축소판입니다.로봇 환경을 위한 JCSP와 모바일 환경을 위한 JCSP에 대한 연구는 Napier University Edinburgh에서 활발한 연구 분야입니다.'JCSP re'의 실제 구현은 로봇에 동일한 동시 소프트웨어 개발을 가능하게 한다.특히, 이 연구의 대상은 Java [3]소스 코드를 실행하는 인기 있는 LeJos NXJ 가상 머신을 실행할 수 있기 때문에 Lego Mindstorms NXT였습니다.
다른 언어의 JCSP 사용
JCSP는 기본적으로 순수 Java API입니다(단, JVM에 대한 C-CSP 확장을 사용하는 연구 대안이 있습니다).따라서 원칙적으로 스칼라 및 그루비 어플리케이션과 자바 어플리케이션에서의 동시 동작에 매우 적합합니다.
따라서 JCSP는 Scala의 배우 모델에 대한 대안을 제공할 수 있습니다.JCSP는 동기화된 통신을 사용하고 액터는 버퍼링된(비동기식) 통신을 사용합니다.각각은 특정 상황에서 장점이 있습니다.JCSP에서는 채널을 버퍼링할 수 있기 때문에 액터 모델을 쉽게 에뮬레이트할 수 있습니다.반대는 사실이 아닙니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b Belapurkar, Abhijit (21 June 2005). "CSP for Java programmers". IBM DeveloperWorks. Retrieved 2007-04-20.
- ^ Welch, Peter; Martin, Jeremy (2000). Formal Analysis of Concurrent Java Systems. Communicating Process Architectures 2000 (Report).
- ^ Jon Kerridge, Alex Panayotopoulos, Patrick Lismore. "JCSPre: the Robot Edition to Control LEGO NXT Robots". Concurrent Systems Engineering Series Volume 66: Communicating Process Architectures 2008. IOS Press Books: 255–270. doi:10.3233/978-1-58603-907-3-255. Archived from the original on 2010-04-18.
{{cite journal}}: CS1 maint: bot: 원래 URL 상태를 알 수 없음(링크) CS1 maint: 작성자 파라미터 사용(링크)
외부 링크
- 켄트 대학의 JCSP 프로젝트
- JCSP[permanent dead link] 리 얼리 베타 릴리즈