조인 패턴

Join-pattern
조인 패턴
패러다임동시 컴퓨팅, 분산 프로그래밍
개발자인리아 인리아
웹사이트인리아 조인
주요 구현
Java, Polyphonic C#, Unified Parallel C, , Join library, Boost가입하십시오.
영향받은
미적분학 결합

조인패턴동시, 병렬, 분산형 컴퓨터 프로그램을 메시지 전달 방식으로 작성하는 방법을 제공한다.스레드나 잠금장치의 이용에 비해 동시환경의 복잡성을 추상화하고 확장성을 확보하기 위해 통신구축 모델을 활용한 고급 프로그래밍 모델이다.그것의 초점은 채널 그룹에서 원자적으로 소비되는 메시지들 사이의 화음의 실행에 있다.

이 템플릿은 결합 미적분학을 기반으로 하며 패턴 매칭을 사용한다.구체적으로, 이것은 동시 통화와 메시지 패턴을 일치시킴으로써 여러 기능 및/또는 채널의 결합 정의를 허용함으로써 이루어진다.그것은 동시성 패턴의 한 유형이다. 왜냐하면 그것은 이들 실체가 다중 스레드 프로그래밍 패러다임을 소통하고 다루기 더 쉽고 더 융통성 있게 만들기 때문이다.

설명

조인 패턴(또는 으로 된 코드)은 동기화와 일치가 있는 슈퍼 파이프라인과 같다.실제로 이 개념은 일치별로 요약되어 서로 다른 메시지 대기열에서 사용할 수 있는 메시지 집합에 합류한 다음, 하나의 처리기로 모두 동시에 처리한다.[1]그것은 키워드로 표현될 수 있다.when우리가 예상했던 첫 번째 통신을and다른 채널과 에 가입하다/가입하다do다른 수집된 메시지로 일부 태스크를 실행하십시오.구성된 결합 패턴은 일반적으로 다음과 같은 형태를 취한다.

j.언제(a1).그리고(a2). ... .그리고(a의).하다(d) 

주장a1When(a1)동기식 또는 비동기식 채널 또는 비동기식 채널의 배열일 수 있다.그 이후의 각 논점은 다음과 같다.And(ai)(용)i > 1)는 비동기 채널이어야 한다.[2]

더 정확히 말하면, 연결된 패턴의 체인과 일치하는 메시지로 인해 처리기가 실행될 때(비동기식 컨텍스트인 경우 새 스레드에서) 그렇지 않으면 메시지는 해당 패턴 중 하나가 활성화될 때까지 대기열에 있으며, 일치하는 항목이 여러 개 있을 경우 지정되지 않은 패턴을 선택한다.[3]한 번에 여러 대체 이벤트 중 하나를 서비스하는 이벤트 핸들러와는 달리, 해당 이벤트의 다른 모든 핸들러와 함께 결합 패턴은 채널의 연결을 기다리고 다른 활성화된 패턴과 실행을 위해 경쟁한다.[4]

이 흐름도는 조인 패턴이 서로 다른 채널과의 일반 매칭(현화현 대기)에 의해 어떻게 실행되며 자원을 동기화(무료 또는 잠금)하는지를 보여준다.

조인패턴은 송신과 수신의 두 가지 다른 연산을 지원하는 pi-미적분 채널 x의 집합에 의해 정의되는데, 이를 구현하기 위해서는 두 개의 결합 미적분 이름, 즉 송신(메시지)을 위한 채널 이름 x와 값(요청)을 받기 위한 함수 이름 x가 필요하다.조인 정의의 의미는 다음을 호출하는 것이다.x()채널에서 보낸 값을 반환하다.x<>. 함수가 동시에 발생할 때마다 반환 프로세스를 트리거하고 다른 조인과 동기화하십시오.[5]

J ::= //모양 패턴   x<y> //전송 패턴   x(y) //호출 패턴 기능   J   JBIS //message 

고객의 관점에서, 채널은 단지 동일한 이름과 서명의 방법을 선언한다.고객이 메시지를 올리거나, 채널을 호출하여 요청서를 발행한다.연속 방법은 연속의 When 조항에 따라 각 채널에 단일 요청 또는 메시지가 도착할 때까지 기다려야 한다.연속이 실행될 경우, 각 채널 호출의 인수는 연속의 매개변수로 디큐어링(사용된 변수) 및 전달(원자적으로)된다. [6]

조인 패턴의 클래스 다이어그램

대부분 성능상의 이유로 동기식 통화의 순서를 보장받지 못하는 경우가 많다.마지막으로, 경기가 진행되는 동안 대기열에서 사용할 수 있는 메시지를 방해하는 스레드에 의해 도난당할 수 있다. 실제로, 깨어난 스레드는 다시 기다려야 할 수도 있다.[7]

역사

π-미적분 – 1992년

π-미적분프로세스 미적분학 계열에 속하며, 채널 이름을 사용해 동시 계산의 특성을 기술하고 분석하기 위한 수학적 공식화를 허용하며, 이러한 방식으로 연산 중에 네트워크 구성이 변경될 수 있는 동시 계산을 기술할 수 있다.n

조인-미적분 – 1993

조인 패턴은 분산된 환경에서 효율적인 구현을 위해 설계된 비동기 프로세스 대수인 포넷과 곤시에의 기초 결합-미적분에서 처음 나타났다.[8]결합 미적분은 전체 π-미적분만큼 표현되는 공정 미적분이다.분산 프로그래밍 언어의 설계에 대한 공식적인 근거를 제공하기 위해 개발되었으며, 따라서 랑데부 통신과 같은 다른 프로세스 캘커리에서 발견되는 통신 구조를 의도적으로 회피한다.

분산 결합-계산 – 1996

조인 미적분은 미적분을 통과하는 이름이며 동시 및 분산 프로그래밍의 핵심 언어다.[9]그래서 1996년 분산 프로그래밍과 결합 미적분학을 기반으로 한 분산 결합 미적분법이 탄생한 것이다.이 작업은 에이전트들이 프로그램일 뿐만 아니라 그들의 통신 기능을 가진 프로세스 실행의 핵심 이미지인 모바일 에이전트를 사용한다.

JoCaml, 깔때기 및 Java 가입 – 2000

조캠[11][12] 깔때기는[13][14] 선언적 결합 패턴을 지원하는 기능 언어다.그들은 기능적 환경에서 프로세스 캘커리를 직접 구현하기 위한 아이디어를 제시한다.

(비일반) 자바에 대한 또 다른 확장자,[15] 조인자바는 폰 이츠슈타인과 키어니가 독자적으로 제안했다.

폴리포닉 C# – 2002

카르델리, 벤튼, 포넷은 Polyphonic C#[16]라고 불리는 C#에 대해 객체 지향적인 결합 패턴을 제안했다.

CΩ – 2003

CΩ은 결합 미적분학을 객체 지향 설정에 적응시키는 것이다.[17]폴리포닉 C#의 이 변종은 Ω (.k.a)의 공개 발매에 포함되었다.2004년)

스칼라 조인 – 2007

스칼라 조인은 기존 배우 기반의 동시성 프레임워크에 조인을 통합하기 위해 확장 가능한 패턴 매칭의 맥락에서 스칼라와 결합-패턴을 사용하는 라이브러리다.

Jerlang – 2009년

얼랑은 동시, 실시간, 분산 패러다임을 기본적으로 지원하는 언어다.프로세스 간 동시성이 복잡했기 때문에 이 프로젝트는 조인 미적분학을 기반으로 새로운 언어인 JERLang(J는 조인(Join)을 구축한다.

고전 프로그래밍 문헌의 결합 패턴

"조인패턴은 배우나 활동적인 사물처럼 관련 동시성 관용어를 쉽게 인코딩하는 데 사용할 수 있다."[18]

계급 대칭 배리어 { 공중의 읽기 전용 동기식.채널 도착하다; 공중의 대칭 배리어(인트로 n) {     // j 생성 및 초기화 채널(측면)     시합을 하다 쓰다듬다 = j.언제(도착하다);     을 위해 (인트로 i = 1; i < n; i++) 쓰다듬다 = 쓰다듬다.그리고(도착하다);     쓰다듬다.하다(() => { }); } } 
시합을 하다 j = 가입하다.만들다(); 동기식.채널[] 배가 고픈; 비동기식.채널[] 젓가락질; j.초기화(밖으로 배가 고픈, n); j.초기화(밖으로 젓가락질, n); 을 위해 (인트로 i = 0; i < n; i++) {     시합을 하다 남겨진 = 젓가락질[i];     시합을 하다 맞다 = 젓가락질[(i+1) % n];     j.언제(배가 고픈[i]).그리고(남겨진).그리고(맞다).하다(() => {     먹다(); 남겨진(); 맞다(); // 젓가락 교체     }); } 
계급 자물쇠 {     공중의 읽기 전용 동기식.채널 획득하다;     공중의 읽기 전용 비동기식.채널 해제;     공중의 자물쇠() {         // j 생성 및 초기화 채널(측면)         j.언제(획득하다).그리고(해제).하다(() => { });         해제(); // 처음에 무료     } } 
계급 버퍼<T> {     공중의 읽기 전용 비동기식.채널<T> 놓다;     공중의 읽기 전용 동기식<T>채널 얻다;     공중의 버퍼() {         가입하다 j = 가입하다.만들다(); // 조인 개체 할당         j.초기화(밖으로 놓다);         // 채널 바인딩         j.초기화(밖으로 얻다);         j.언제(얻다).그리고(놓다).하다 // 코드 등록         (t => { 돌아오다 t; });     } } 
계급 ReaderWriterLock {     사유의 읽기 전용 비동기식.채널 놀고 있는;     사유의 읽기 전용 비동기식.채널<인트로> 공유했습니다.;     공중의 읽기 전용 동기식.채널 AcqR, AcqW, RelR, 렐W;     공중의 ReaderWriterLock() {     // j 생성 및 초기화 채널(측면)     j.언제(AcqR).그리고(놀고 있는).하다(() => 공유했습니다.(1));     j.언제(AcqR).그리고(공유했습니다.).하다(n => 공유했습니다.(n+1));     j.언제(RelR).그리고(공유했습니다.).하다(n => {     만일 (n == 1) 놀고 있는(); 다른 공유했습니다.(n-1);     });     j.언제(AcqW).그리고(놀고 있는).하다(() => { });     j.언제(렐W).하다(() => 놀고 있는());     놀고 있는(); // 처음에 무료 } } 
계급 세마포레 {     공중의 읽기 전용 동기식.채널 획득하다;     공중의 읽기 전용 비동기식.채널 해제;     공중의 세마포레(인트로 n) {         // j 생성 및 초기화 채널(측면)         j.언제(획득하다).그리고(해제).하다(() => { });         을 위해 (; n > 0; n--) 해제(); // 처음에 n free     } } 

기본 특징 및 개념

  • 결합-미적분학 : 결합-패턴의 첫 번째 유령은 이 과정 미적분과 함께 나온다.
  • 메시지 패싱 : 병렬적인 이유로 메시지 패싱 시스템을 적용한 결합패턴 작업
  • 채널 : 동시에 실행되는 스레드 간에 메시지를 동기화하고 전달하는 데 채널이 사용된다.일반적으로 채널은 둘 이상의 결합 패턴에 관여할 수 있으며, 각 패턴은 채널이 호출될 때 실행될 수 있는 다른 연속성을 정의한다.[6]
  • 동기식 : 결합 패턴은 결과를 반환하는 동기식 채널을 사용할 수 있다.동기식 패턴의 지속은 동기식 전송기의 스레드에서 실행된다.[6]
  • 비동기식 : 결과를 반환하지 않고 인수를 하는 비동기식 채널을 사용할 수도 있다.비동기 패턴의 지속은 새로 생성된 스레드에서 실행된다.조인 패턴은 서브루틴이 지속되고 비동기 채널만 나열되는 경우 순전히 비동기식일 수 있다.[6]
  • 동기식 버퍼와 비동기식 버퍼 결합: 동기식 버퍼와 비동기식 버퍼의 선언을 병합하면 두 가지 통신 유형의 소비자를 지원하는 모듈이 생성될 것이다.[6]
  • 스케줄러 : 조인 패턴 사이에 스케줄링(예: 라운드 로빈 스케줄러, 첫 번째 일치 스케줄러)이 있다.[6]
  • 디자인 패턴 : 결합 패턴은 우선 행동 패턴과 동시성 패턴이다.
  • 동시 프로그래밍 : 동시 프로그래밍 방식으로 실행된다.
  • 패턴 일치 : 조인 패턴은 일치하는 태스크와 함께 작동한다.
  • 병렬 프로그래밍 : 병렬로 작업을 수행한다.
  • 분산 프로그래밍 : 이러한 패턴이 있는 다른 에이전트와 환경에 작업이 분산될 수 있다.
  • 소프트웨어 트랜잭션 메모리 : 소프트웨어 트랜잭션 메모리(STM)는 공동 간의 통신을 위해 가능한 구현의 하나이다.
  • 중복 : 패턴은 겹치는 채널 집합에 선언된 패턴을 허용할 수 있다.

응용 프로그램 도메인

모바일 에이전트

모바일 에이전트는 특정한 사회적 능력과 가장 중요한 모빌리티를 가진 자율적인 소프트웨어 에이전트다.그것은 시스템 소프트웨어와 그들의 실행을 계속하면서 다른 시스템들 사이를 자동으로 이동할 수 있는 데이터로 구성되어 있다.

모바일 에이전트는 결합 미적분학을 사용할 경우 동시성과 분포를 일치시키는 데 사용될 수 있다.그래서 "분산된 결합 미적분"이라는 새로운 개념이 만들어졌는데, 그것은 이동성을 설명하기 위한 위치와 원시 요소를 가진 결합 미적분학의 확장이다.이 혁신은 대리인의 실제 위치를 표현하는 물리적 사이트인 위치의 아이디어를 허용하는 통신 기능을 가진 프로세스 실행으로 대리인을 사용한다.조인 미적분학 덕분에 한 위치를 원자로 다른 장소로 옮길 수 있다.[23]

에이전트의 프로세스는 메시지의 비동기적 방출, 다른 위치로의 마이그레이션을 포함한 그 기능을 정의하는 세트로 지정된다.결과적으로, 위치는 에이전트의 이동을 더 쉽게 나타내기 위해 트리에 구성된다.이 표현으로, 이 해결책의 장점은 단순한 실패 모델을 만들 수 있다는 것이다.일반적으로 물리적 사이트의 충돌은 모든 위치의 영구적인 고장을 야기한다.그러나 결합 미적분학을 사용하면 다른 실행 위치에서 문제를 감지할 수 있으므로 오류 복구가 가능하다.[23]

그래서 결합 미적분은 분산 프로그래밍 언어의 핵심이다.특히, 운용 의미론은 고장과 함께 분산된 설정에서 쉽게 구현할 수 있다.그래서 분산 결합 미적분은 채널 이름과 위치 이름을 어휘적 범위가 있는 퍼스트 클래스 값으로 처리한다.위치는 자신의 이동을 제어하며, 이름이 수신된 위치로만 이동할 수 있다.이것은 정적 분석과 안전한 이동성을 위한 건전한 기반을 제공한다.이것은 분산형 구성을 표현하기 위한 완벽한 방법이다.그러나 실패가 없는 경우 공정의 실행은 분배와 무관하다.이러한 위치 투명성은 모바일 에이전트 설계에 필수적이며, 그들의 속성을 확인하는 데 매우 유용하다.[23]

2007년, 에이전트들을 전향적으로 만드는 방법을 포함한 기본 결합 미적분학의 연장이 나왔다.에이전트들은 그들 사이에 공유된 환경을 관찰할 수 있다.이러한 환경에서는 모든 에이전트와의 공유 변수(예: 그들 간에 에이전트를 검색하는 이름 지정 서비스)를 정의할 수 있다.[24]

컴파일

조인 언어는 핵심 언어로 채택된 조인 미적분 위에 구축된다.그래서 모든 미적분은 비동기적 프로세스로 분석되며 결합 패턴은 결과를 동기화하는 모델을 제공한다.[9]
이를 위해 다음과 같은 두 가지 컴파일러가 존재한다.

  • 컴파일러 가입:"조인랭게이지"라는 언어의 컴파일러.이 언어는 오직 결합 미적분학을 위해 만들어졌다.
  • 조캄 컴파일러:결합 미적분을 사용하기 위해 만든 Objectif Caml 확장 컴파일러.

이 두 컴파일러는 같은 시스템, 즉 자동화와 함께 작동한다.

A(n) B() = P(n) 및 A(n) C() = Q(n);

완성된 결합 모델에 도달하는 메시지의 소비를 나타낸다.각 상태는 코드 실행을 위한 가능한 단계이며 각 전환은 두 단계 사이에서 변경하기 위한 메시지의 수신이다.그래서 모든 메시지가 잡힐 때 컴파일러는 완성된 모델 조인트에 해당하는 바디 조인 코드를 실행한다.

따라서 결합 미적분학에서 기본값은 예시와 같은 이름 A, B 또는 C이다.그래서 두 컴파일러는 이 값을 두 가지 방법으로 표현한다.
컴파일러 가입은 두 개의 슬롯이 있는 벡터를 사용하며, 첫 번째 슬롯은 it-self라는 이름으로, 두 번째 슬롯은 보류 중인 메시지의 대기열로 지정된다.
Jocaml은 정의에 대한 포인터처럼 이름을 사용한다.이 정의는 다른 이름의 다른 포인터를 상태 필드 및 메시지별 일치 날짜 구조와 함께 저장한다.
근본적인 차이점은 보호 프로세스가 실행될 때, 첫째로, 모든 이름이 준비된 메시지인지 확인되었고, 둘째는 하나의 변수만 사용하고 다른 것들은 접근하여 모델이 완료되었는지 여부를 알 수 있다.[9]

최근의 연구는 편찬 계획을 파견과 출고라는 두 가지 기본 단계를 결합한 것으로 설명하고 있다.디스패쳐의 설계와 정확성은 본질적으로 패턴 매칭 이론에서 비롯되는 반면, 통신에 내부 포워딩 단계를 삽입하는 것은 자연스러운 발상인데, 이는 직관적으로 프로세스 행동을 바꾸지 않는다.그들은 관찰할 가치가 있는 것은 런타임 수준에서 확장된 조인 패턴 일치를 직접 구현하는 것으로 메시지 대기열의 관리를 상당히 복잡하게 할 것이며, 메시지 대기열을 소비하기 전에 일치하는 메시지를 검색해야 할 필요가 있을 이라고 관찰했다.[25]

구현 및 라이브러리

서로 다른 언어를 가진 조인패턴은 많은 용도가 있다.일부 언어는 Polyphonic C# 또는 MC#와 같이 결합 패턴을 구현의 기반으로 사용하지만 다른 언어는 Scala Joins[26] for Scala 또는 Join Library for VB와 같은 라이브러리에 의해 결합된다.[27]또한 가입 패턴은 가입 패턴을 업그레이드하기 위해 Scheme과 같은 일부 언어를 통해 사용된다.[28]

제랑 CB 라이브러리 가입 폴리포닉 C# 평행 C# ω 스칼라 조인 F# 계략 Java 가입 조캠
패턴 매칭
조인 패턴 사이의 스케줄러 예: 첫 번째 일치 예: 첫 번째/원형 로빈 아니요. 예 : 랜덤 예: 첫 번째/원형 로빈 예 : 랜덤
제네릭스 해당 없음 아니요. 해당 없음 아니요. 아니요. 아니요. 아니요. 아니요.
재정의 아니요. 해당 없음 해당 없음 해당 없음 아니요. 아니요. 아니요.

Java 가입

join[29] Java는 join 미적분학을 사용할 수 있는 자바 프로그래밍 언어에 기반을 둔 언어다.그것은 세 가지 새로운 언어 구조를 도입한다.

  • 조인 방법은 둘 이상의 조인 조각으로 정의된다.조인 방법은 조인 패턴의 모든 파편이 호출되면 실행된다.반송 유형이 표준 Java 유형인 경우, 선행 파편은 가입 패턴이 완료되고 메서드가 실행될 때까지 발신자를 차단한다.반환 유형이 신호 유형인 경우 선행 파편이 즉시 반환된다.모든 후행 조각은 비동기적이므로 발신자를 차단하지 않는다.

예:

계급 조인예제 {     인트로 토막1() & 토막2(인트로 x) {         // fragment1의 호출자에게 x의 값을 반환함         돌아오다 x;     } } 
  • 비동기 방법은 신호 반환 유형을 사용하여 정의된다.이는 방법이 즉시 되돌아온다는 점을 제외하면 보이드 유형과 동일한 특성을 가지고 있다.비동기식 방법이 호출되면, 새로운 스레드가 생성되어 메서드의 본문을 실행한다.

예:

계급 스레드예제 {     신호를 보내다 실을 꿰다(SomeObject x) {         // 이 코드는 새 스레드에서 실행됨     } } 
  • 순서 한정자

조인 조각은 여러 조인 패턴으로 반복할 수 있으므로 파편을 호출할 때 여러 조인 패턴이 완료되는 경우가 있을 수 있다.B(), C() 및 D()를 호출할 경우 아래의 예에서 그러한 경우가 발생할 수 있다.최종 A() 파편은 세 가지 패턴을 완성하므로 가능한 세 가지 방법이 있다.여기에 순서 클래스 수식어를 사용하여 어떤 조인 방법을 호출할 것인지 결정한다.정렬되지 않은 클래스 한정자를 사용할 때 기본값은 임의로 방법 중 하나를 선택하는 것이다.순서가 정해진 수식어를 사용하면 선언된 순서에 따라 방법이 우선시된다.

예:

계급 주문된 심플 조인패턴 {     공허하게 하다 A() & B() {     }     공허하게 하다 A() & C() {     }     공허하게 하다 A() & D() {     }     신호를 보내다 D() & E() {     } } 

가장 가까운 관련 언어는 폴리포닉 C#이다.

제랑

Erlang에서 여러 프로세스 간의 코딩 동기화는 간단하지 않다.그래서 에를랑의 연장선인 [30]Jerlang이 만들어진 것이고, The J는 조인을 위한 것이다.실제로, 이러한 한계를 극복하기 위해, Erlang에 대한 조인 미적분학 연장이 추진되었다.이 언어의 특징은 다음과 같다.

  • 조인은 첫 번째 일치 의미론 및 메시지 순서를 보존하는 다중 패턴의 가능성을 허용한다.
작전() ->     받다         {네 알겠습니다, 합계를 내다} 그리고 {발랄하게 하다, X} 그리고 {발랄하게 하다, Y} ->             {합계를 내다, X + Y};         {네 알겠습니다, 다중의} 그리고 {발랄하게 하다, X} 그리고 {발랄하게 하다, Y} ->             {다중의, X * Y};         {네 알겠습니다, 후보선수} 그리고 {발랄하게 하다, X} 그리고 {발랄하게 하다, Y} ->             {후보선수, X - Y};     종지부를 찍다 종지부를 찍다 
  • 가드는 패턴 측면에서 표현하지 않는 추가적인 필터링을 제공한다.부작용이 없는 표현식 수가 제한됨
받다     {거래, M} 그리고 {한도를 정하다, 더 낮게, 상부}         할 때 (더 낮게 <= M 그리고 M <= 상부 ) ->     commit_message(M, 거래) 종지부를 찍다 
  • 비선형 패턴으로 메시지는 여러 조인과 일치할 수 있다.
받다     {얻다, X} 그리고 {세트, X} ->         {찾았다, 2, X} 종지부를 찍다 ... 받다     {, id} 그리고 {저술의, } 그리고 {을 저지르다, 아이디} ->         perform_mission을 하다.(, 아이디) 종지부를 찍다 
  • 전파는 올바른 메시지를 삭제하는 대신 복사하는 것을 허용한다.
받다     받침대({세션, 아이디}) 그리고 {연기하다, 액션, 아이디} ->         perform_action을 하다.(액션, 아이디);     {세션, 아이디} 그리고 {로그아웃하다, 아이디} ->         logout_user(아이디) 종지부를 찍다 ... 받다     {, id} 그리고 {저술의, } 그리고 {을 저지르다, 아이디} ->         perform_mission을 하다.(, 아이디) 종지부를 찍다 
  • 동기 호출
받다     {받아들이다, 피드1} 그리고 {비동기적, 가치}                    그리고 {받아들이다, 피드2} ->         피드1 ! {네 알겠습니다, 가치},         피드2 ! {네 알겠습니다, 가치} 종지부를 찍다 

C++

Yigong 류는 비동기 및 동기 채널, 코드 등과 같은 모든 유용한 도구를 포함하여 조인 패턴에 대한 클래스를 작성했다.Boost c++ 프로젝트에 통합되어 있다.

템플릿 <타이프 이름 V> 계급 완충하다: 공중의 공동의 { 공중의:   비동기식의<V> 놓다;   싱크로 하다<V,공허하게 하다> 얻다;   완충하다() {     화음을 내다(얻다, 놓다, &완충하다::화음_바디);   }   V 화음_바디(void_t g, V p) {     돌아오다 p;   } }; 

이 예제는 기본 작업을 저장하고 가져오는 스레드 안전 버퍼와 메시지 큐를 보여준다.[31]

C#

폴리포닉 C#

폴리포닉 C#는 C# 프로그래밍 언어의 확장이다.그것은 동기식 및 비동기식(통화자에게 제어권을 돌려주는) 방법과 코드('동기화 패턴' 또는 '조인 패턴'이라고도 함)를 가진 새로운 동시성 모델을 도입한다.

공중의 계급 버퍼 {     공중의  얻다() & 공중의 비동기식의 놓다( s) {         돌아오다 s;     } } 

이것은 간단한 완충 사례다.[32]

MC#

MC# 언어는 동시 분산 계산의 경우를 위해 폴리포닉 C# 언어를 개작한 것이다.

공중의 핸들러 겟2 장기의 () & 채널을 돌리다 c1 (장기의 x) & 채널을 돌리다 c2 (장기의 y) {     돌아오다 (x + y); } 

이 예는 화음을 동기화 도구로 사용하는 것을 보여준다.

평행 C#

Parallel C#는 Polyphonic C#에 기반을 두고 있으며, 그들은 영화 방법, 고차 함수 같은 새로운 개념을 추가했다.

사용. 시스템;   계급 검정13 {     인트로 받다() & 비동기식의 보내다(인트로 x) {         돌아오다 x * x;     }       공중의 정태의 공허하게 하다 메인(끈을 매다[] 아그) {         검정13 t = 새로운 검정13();         t.보내다(2);         콘솔.WriteLine(t.받다());     } } 

이 예는 조인 사용법을 보여준다.[33]

ω

동시 프로그래밍을 지원하기 위해 새로운 언어 기능을 추가한다(이전의 폴리포닉 C# 기반).C# 및 기타 의 동시성 라이브러리 가입.NET 언어는 이 프로젝트에서 파생되었다.[34][35]

확장 가능한 결합 패턴

선언적이고 확장 가능한 조인 패턴 라이브러리를 쉽게 사용할 수 있다.루소 도서관 맞은편에는 세계적인 자물쇠가 없다.[27]사실, CAS와 Atomic message system을 비교-스왑하고 있다.도서관은[36] 가입 패턴에 대해 세 가지 개선사항을 사용한다.

  • 사용되지 않는 리소스에 대한 메시지 도용(배깅 허용)
  • 느리게 대기하는 대기열은 낙관적인 빠른 경로로 할당 또는 대기열을 방지하여 프로세서 간 통신과 할당을 모두 절약한다.
  • 상태 "WOKN" : 차단된 동기 호출자가 한 번만 깨우도록 보장한다.

조캠

조인패턴이 구현된 첫 번째 언어는 조캠이다.실제로, 초기에는 조카멜 컴파일러와 함께 모든 다른 구현이 편집되었다.JoCaml 언어OCaml 언어의 확장이다.동시성 및 동기화 지원, 프로그램의 분산 실행, 실행 중 활성 프로그램 조각의 동적 재배치 등을 통해 OCaml을 확장한다.[37]

타자를 치다 동전. = 니켈   다임 그리고 음료수 = 커피    그리고 단추 = 비코피   BTea   비칸셀;;  (* def는 조인 패턴 세트 절을 정의함 * =의 왼쪽에 있는 "&"는 조인(채널 동기화)을 의미한다. * 오른쪽의 "&"은 병렬 처리라는 의미 * synchron_reply :="reply" [x] "to" channel_name * 동기식 채널은 기능 유사 유형("a -> b) * 비동기 채널에는 유형이 있음("Join.chan) * 패턴 rhs 식의 마지막 문만 비동기 메시지일 수 있음 * 비동기 메시지 위치에서 0은 STOP(CSP 용어로는 "보낸 메시지 없음")을 의미한다. *)  반항하다 놓다(s) = print_endline s ; 0 (* STOP *)    ;; (* put: 문자열 Join.chan *)  반항하다 서브를 넣다(술을 마시다) = 짝을 맞추다 술을 마시다 와 함께                  커피 -> 놓다("코피")                     -> 놓다("차")               ;; (* serve: drinks Join.chan *)  반항하다 환불하다(v) = 하게 하다 s = 프린트프.단거리 경주 " %d 환불" v  놓다(s)      ;; (* 환불: in Join.chan *)  하게 하다 new_new 서브를 넣다 환불하다 =   하게 하다 복수하다 (비용이 들다:인트로) (대변을 보다:인트로) = 만일 대변을 보다 >= 비용이 들다                       그때 (진실의, 대변을 보다 - 비용이 들다)                       다른 (거짓의, 대변을 보다)      반항하다 동전을 만들다(니켈) & 가치를 매기다(v) = 가치를 매기다(v+5) & 답글 ()  동전을 만들다   또는 동전을 만들다(다임) & 가치를 매기다(v) = 가치를 매기다(v+10) & 답글 ()  동전을 만들다    또는 단추를 채우다(비코피) & 가치를 매기다(v) =       하게 하다 should_message, 나머지 = 복수하다 10 v       (만일 should_message 그때 서브를 넣다(커피) 다른 0 (* STOP *))               & 가치를 매기다(나머지) & 답글 ()  단추를 채우다    또는 단추를 채우다(BTea) & 가치를 매기다(v) =       하게 하다 should_message, 나머지 = 복수하다 5 v       (만일 should_message 그때 서브를 넣다() 다른 0 (* STOP *))               & 가치를 매기다(나머지) & 답글 ()  단추를 채우다    또는 단추를 채우다(비칸셀) & 가치를 매기다(v) = 환불하다( v) & 가치를 매기다(0) & 답글 ()  단추를 채우다    알을 낳다 가치를 매기다(0) ;   동전을 만들다, 단추를 채우다  (*동전, 버튼: int -> 단위 *)   ;; (* new_vending: Join.chan -> Join.chan ->(in->unit)*(in->unit) *)  하게 하다 씨코인, c버튼 = new_new 서브를 넣다 환불하다    씨코인(니켈); 씨코인(니켈); 씨코인(다임);    유닉스.잠을 자다(1); c버튼(비코피);    유닉스.잠을 자다(1); c버튼(BTea);    유닉스.잠을 자다(1); c버튼(비칸셀);   유닉스.잠을 자다(1) (* 마지막 메시지가 표시되도록 설정 *)   ;; 

주다

커피 티 환불 5

[38] 비동기 메시지 전달, 데이터 흐름 프로그래밍, 하스켈과 같은 구문에 기초한 동시성을 가진 제한된 자원 플랫폼에 대해 엄격하고 강하게 타이핑된 기능 언어다.

흄은 동기식 메시지를 제공하지 않는다.

채널이 공통으로 박스로 되어 있는 조인 패턴 세트를 감싸고, 모든 채널을 튜플에 나열하고 가능한 모든 출력을 아웃 튜플에 지정한다.

세트의 모든 조인 패턴은 비필수 채널에 대해 '*'를 지정하는 박스 입력 튜플 유형을 준수해야 하며, 출력 튜플에 부합하는 유형의 표현식은 비연방 출력에 '*'를 표시해야 한다.

와이어 절에 명시되어 있다.

  1. 해당 입력 출처 또는 출처와 선택적으로 시작 값의 튜플
  2. 채널 또는 싱크(stdout, ..)가 되는 출력 대상의 튜플.

상자는 출력 튜플에 적합한 식을 가진 예외 핸들러를 지정할 수 있다.

자료 동전. = 니켈   다임; 자료 음료수 = 커피   ; 자료 단추 = 비코피   BTea   비칸셀;  타자를 치다 인트 = 인트로 32 ; 타자를 치다  = 끈을 매다 ; 보여 주다 u = u 로서 끈을 매다 ;  권투를 하다 커피  ( 동전을 만들다 :: 동전., 단추를 채우다 :: 단추, 가치를 매기다 :: 인트 ) -- 입력 채널 밖으로 ( 마시다_outp :: , 가치를 매기다 :: 인트, 환불_outp :: )  -- 명명된 출력물  짝을 맞추다 -- * 미작성 출력 및 미작성 입력에 대한 와일드카드   ( 니켈, *, v)  -> ( *, v + 5, *)   ( 다임, *, v)    -> ( *, v + 10, *)   ( *, 비코피, v) -> 복수하다 커피 10 v   ( *, BTea, v)    -> 복수하다  5 v   ( *, 비칸셀, v) -> 하게 하다 환불하다 u = "환불 " ++ 보여 주다 u ++ "\n"                        ( *, 0, 환불하다 v) ;  복수하다 술을 마시다 비용이 들다 대변을 보다 = 만일 대변을 보다 >= 비용이 들다                       그때 ( 서브를 넣다 술을 마시다, 대변을 보다 - 비용이 들다, *)                       다른 ( *, 대변을 보다, *);  서브를 넣다 술을 마시다 = 케이스 술을 마시다                 커피 -> "코피\n"                 -> "차\n" ;  권투를 하다 통제를 하다  (c :: 마를 뜨다) 밖으로 (동전을 만들다 :: 동전., 단추를 채우다:: 단추) 짝을 맞추다  'n' -> (니켈, *)    'd' -> (다임, *)    'c' -> (*, 비코피)    't' -> (*, BTea)    'x' -> (*, 비칸셀)    _ -> (*, *) ;  물줄기가 흐르다 console_outp  "std_out" ; 물줄기가 흐르다 console_inp 로부터 "std_in" ;  -- 데이터 흐름 배선   철사를 치다 약물을 마시다     -- 입력(채널 원점)     (통제를 하다.동전을 만들다, 통제를 하다.단추를 채우다, 커피.가치를 매기다 처음에 0)        -- 목적지 출력     (console_outp, 커피.가치를 매기다, console_outp) ;   철사를 치다 통제를 하다     (console_inp)     (커피.동전을 만들다, 커피.단추를 채우다) ; 

비주얼 베이직

Concurrent Basic – CB

비동기 동시성 구조를 가진 Visual Basic 9.0의 확장은 결합 패턴을 제공한다.CB(Polyphonic C#, CΩ 및 Join Library에 대한 이전 연구를 기반으로 한 빌드)는 VB 프로그래머들에게 친숙한 단순한 이벤트와 같은 구문을 채택하고, 일반적인 동시성 추상화를 선언할 수 있으며, 상속에 대한 보다 자연적인 지원을 제공하므로 하위 클래스가 패턴 집합을 증가시킬 수 있다.CB 클래스는 특정 로컬 채널 집합에서 비동기식 및 동기식 통신이 발생했을 때 실행 방법을 선언하여 결합 패턴을 형성할 수 있다.[27]

모듈 버퍼 공용 비동기식 퍼트(ByVal s as string) 공용 동기식 테이크(ByVal s as string) Private Function CaseTakeAndPut(ByVal s as string) As String _ Take Time, Put ReturningEnd Function End Mod Moduled Moduled Moduled Moduled Modulement

이 예제는 Concurrent Basic에서 사용되는 모든 새로운 키워드(비동기식, 동기식 및 시기)를 보여준다.[39]

라이브러리 가입(C# 및 VB)

이 라이브러리는 개체와 제네릭을 사용하는 조인 패턴의 높은 수준의 추상화 입니다.채널은 일부 공통 조인 개체(메서드 대신)의 특별 대리자 값이다.[40]

계급 버퍼 {     공중의 읽기 전용 비동기식.채널<끈을 매다> 놓다;     공중의 읽기 전용 동기식<끈을 매다>채널 얻다;     공중의 버퍼() {         가입하다 합류하다 = 가입하다.만들다();         합류하다.초기화(밖으로 놓다);           합류하다.초기화(밖으로 얻다);         합류하다.언제(얻다).그리고(놓다).하다(위임하다(끈을 매다 s) {              돌아오다 s;      });     } } 

이 예는 조인 객체의 메서드를 사용하는 방법을 보여준다.[41]

스칼라

스칼라에는 "Scala Joins" Scala Joins라고 불리는 도서관이 있어 조인패턴을 사용하기 위해 패턴 매칭을 조인 모델을 만드는 도구로 사용할 것을 제안한다.스칼라에서 조인 패턴의 사용 예를 찾을 수 있다: 스칼라에서 정의 결합.

이 언어의 패턴 매칭 설비는 패턴 매칭에 사용되는 객체에 대한 표현 독립성이 가능하도록 일반화되었다.그래서 이제 도서관에서 새로운 형태의 추상화를 사용할 수 있게 되었다.조인 패턴의 장점은 서로 다른 스레드 간의 동기화에 대한 선언적 규격을 허용한다는 것이다.종종 결합 패턴은 객체의 유효한 상태를 지정하는 유한 상태 기계와 밀접하게 일치한다.

스칼라에서는 패턴 매칭과 스칼라 조인(예: Reader-Writer)으로 많은 문제를 해결할 수 있다.[26]

계급 ReaderWriterLock 연장하다 가입하다 {    사유의 발랄하게 하다 공유. = 새로운 비동기 이벤트[인트]   발랄하게 하다 배타적, 릴리즈특허용 = 새로운 NullarySyncEvent   발랄하게 하다 공유했습니다., 릴리스 공유됨 = 새로운 NullarySyncEvent   합류하다 {     케이스 배타적() & 공유.(0) => 배타적 답글     케이스 릴리즈특허용() => { 공유.(0); 릴리즈특허용 답글 }     케이스 공유했습니다.() & 공유.(n) => { 공유.(n+1); 공유했습니다. 답글 }     케이스 릴리스 공유됨() & 공유.(1) => { 공유.(0); 릴리스 공유됨 답글 }     케이스 릴리스 공유됨() & 공유.(n) => { 공유.(n-1); 릴리스 공유됨 답글 }   }   공유.(0) } 

수업과 함께 우리는 정규 분야의 행사를 선언한다.따라서, 사례 선언 목록을 통해 패턴 일치를 활성화하기 위해 조인 구성을 사용할 수 있다.그 목록은 각 면에 선언문의 일부를 표시한다.왼쪽은 비동기식, 동기식 이벤트의 조합을 보여주는 조인 패턴의 모델이고 오른쪽은 조인 모델로 실행된 조인 본문이다.

스칼라에서는 조인 패턴이 있는 스칼라의 배우 도서관을 이용하는 것도 가능하다.예를 들어, 무한 버퍼:[26]

발랄하게 하다 놓다 = 새로운 조인1[인트] 발랄하게 하다 얻다 = 새로운 가입하다 계급 버퍼 연장하다 조이너액터 {   반항하다 연기하다() {     받다 { 케이스 얻다() & 놓다(x) => 얻다 답글 x }   } } 

배우 기반의 동시성은 도서관을 통해 지원되며, 도서관 확장으로도 가입 패턴을 제공하므로, 참여 패턴을 행위자가 제공하는 이벤트 중심의 동시성 모델과 결합할 수 있는 기회가 있다.예제에서 보듯이 배우와 결합 패턴을 사용하는 것도 같은 방식으로 모델이 완성되는 시기를 보여주기 위해 수신하는 방식으로 사례 선언 리스트를 작성하면 된다.

실제로 조인 패턴을 사용하기 위해 F#에서 동일한 도구를 사용할 수 있음

스칼라 조인치미스트는 필립 할러 박사의 스칼라 조인을 개선한 조인 패턴의 새로운 구현이다.

하스켈

Join Language는 Haskell에서 Join Pattern을 구현한 것이다.

계략

조인 패턴은 특히 높은 수준의 추상화를 가진 많은 프로그래밍 상황에서 사용할 수 있는 멀티 코어 아키텍처에 새로운 프로그래밍 유형을 허용한다.이것은 근위대와 전파를 기반으로 한다.그래서 이 혁신의 예는 체계에서 구현되었다.[28]

일치하는 키를 가진 데이터만 업데이트/검색되도록 하려면 가드가 필수적이다.전파는 아이템을 취소하고, 그 콘텐츠를 읽고, 아이템을 스토어에 다시 넣을 수 있다.물론 그 물건도 읽으면서 매장에 있다.간수들은 공유된 변수로 표현된다.그래서 신기하게도 결합패턴은 현재 전파되고 단순화된 부분을 포함할 수 있다.그래서 Scheme에서 / 이전의 부분은 전파되고 / 이후의 부분은 제거된다.목표 기반의 사용은 많은 작업에서 작업을 분리하고 마지막에 조인 패턴으로 모든 결과를 결합하는 것이다.MiniJoin이라는 이름의 시스템은 중간 결과를 다른 과제의 해결이 가능하다면 그것을 사용하는 것을 실행했다.만약 가능하지 않다면, 그것은 다른 과제의 해결이 스스로 해결되기를 기다린다.
따라서 멀티 코어 아키텍처에서 병렬로 실행되는 동시 결합 패턴 애플리케이션은 병렬 실행이 충돌로 이어진다는 것을 보장하지 않는다.이것과 높은 수준의 병렬화를 보장하기 위해, 원자 비교-스왑(CAS)을 기반으로 고도로 조정된 동시 데이터 구조 내의 소프트웨어 트랜잭션 메모리(STM)를 사용한다.이를 통해 멀티 코어 아키텍처에서 많은 동시 작업을 병렬로 실행할 수 있다.더욱이, 원자 실행은 CAS와 STM 사이의 "허위 충돌"을 방지하기 위해 사용된다.[28]

기타 유사한 설계 패턴

조인 패턴은 멀티태스크를 수행하는 유일한 패턴이 아니라 리소스 간 통신, 동기화 및 다른 프로세스와의 결합을 가능하게 하는 유일한 패턴이다.

  • 시퀀스 패턴 : 작업이 다른 작업으로 전환하기 위해 완료되는 대기(클래식 구현)로 구성된다.[43]
  • 분할 패턴(병렬 분할): 여러 작업을 동시에 병행한다(예: 지도 축소).[44]

참고 항목

  • Java 가입 – Java 가입은 표준 Java 프로그래밍 언어를 확장하는 프로그래밍 언어임
  • Join(통화 라이브러리) – Join은 Microsoft Research for 의 비동기식 동시 컴퓨팅 API이다.NET Framework.
  • 조인-미적분 – 조인-미적분은 분산 프로그래밍 언어의 설계에 대한 공식적인 근거를 제공하기 위해 개발되었다.

참조

  • Cédric, Fournet; Luc, Maranget (2006-08-15). "The Join-Calculus language". Institut National de Recherche en Informatique et Automatique. Retrieved 2012-10-09.
  • "JoinCalculus". Cunningham & Cunningham, Inc. October 25, 2009. Retrieved 2012-10-09.
  • Fournet, Cédric; Gonthier, Georges; Levy, Jean-Jacques; Maranget, Luc (1996). CONCUR '96: Concurrency Theory. Lecture Notes in Computer Science. Vol. 1119. Le Chesnay: Concurrency Theory. pp. 406–421. doi:10.1007/3-540-61604-7_67. ISBN 978-3-540-61604-7.
  • Maludzinski, Slawomir; Dobrowolski, Grzegorz (2007). Agent Environment and Knowledge in Distributed Join Calculus. Lecture Notes in Computer Science. Vol. 4696. pp. 298–300. doi:10.1007/978-3-540-75254-7_30. ISBN 978-3-540-75253-0.
  • Russio, Claudio (2007). "The Joins Concurrency Library". Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. Vol. 4354. Cambridge: Practical Aspects of Declarative Languages. pp. 260–274. CiteSeerX 10.1.1.187.8792. doi:10.1007/978-3-540-69611-7_17. ISBN 978-3-540-69608-7.
  • Maranget, Luc; Le Fessant, Fabrice (25 September 2007). "Compiling Join-Patterns". Le Chesnay France. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  • Haller, Phillip; Van Cutsem, Tom (2008). Coordination Models and Languages. Lecture Notes in Computer Science. Vol. 5052. Lausanne: Coordination Models and Languages. pp. 1–15. CiteSeerX 10.1.1.210.1242. doi:10.1007/978-3-540-68265-3_9. ISBN 978-3-540-68264-6.
  • Sulzmann, Martin; S. L. Lam, Edmund. "Parallel Join Patterns with Guards and Propagation". Denmark. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  • Fournet, Cédric; Gonthier, Georges (2002). Applied Semantics. Lecture Notes in Computer Science. Vol. 2395. Caminha. pp. 1–66. CiteSeerX 10.1.1.4.4788. doi:10.1007/3-540-45699-6_6. ISBN 978-3-540-44044-4.
  • Ma, Qin; Maranget, Luc (5 April 2004). CONCUR 2004 - Concurrency Theory. Lecture Notes in Computer Science. Vol. 3170. INRIA. pp. 417–431. CiteSeerX 10.1.1.499.8443. doi:10.1007/978-3-540-28644-8_27. ISBN 978-3-540-22940-7.
  • Singh, Satnam (6 January 2007). "Higher Order Combinators for Join Patterns using STM". {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  • MONSIEUR, Geert (2010), Pattern-based Coordination in Process-based Service Compositions, Leuven Belgium: Katholiek Universiteit Leuven
  • Russo, Claudio V. (23 October 2008). "Join Patterns for Visual Basic". ACM SIGPLAN Notices. 43 (10): 53–72. doi:10.1145/1449955.1449770.
  • Aaron, Turon; Russo, Claudio V. (27 October 2011). Scalable Join Patterns (PDF). Portland, Oregon, USA. ISBN 9781450309400.
  • Guzev, Vadim B. (April 2008). "Parallel C#: The Usage of Chords and Higher-Order Functions in the Design of Parallel Programming Languages" (PDF). Moscow, Russia. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)

메모들

  1. ^ Taral Dragon (October 25, 2009). "Join Calculus". Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  2. ^ Russo, Claudio V. (23 October 2008). "Join Patterns for Visual Basic". ACM SIGPLAN Notices. 43 (10): 10. doi:10.1145/1449955.1449770.
  3. ^ "Parallel C#". Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  4. ^ Russo, Claudio V. "Join Patterns for Visual Basic": 2. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  5. ^ Fournet, Cédric; Gonthier, Georges (2002). Applied Semantics. Lecture Notes in Computer Science. Vol. 2395. Caminha. pp. 268–332. CiteSeerX 10.1.1.4.4788. doi:10.1007/3-540-45699-6_6. ISBN 978-3-540-44044-4.
  6. ^ a b c d e f Visual Basic & Claudio V의 결합 패턴 Ruso.
  7. ^ Russo, Claudio V. (23 October 2008). "Join Patterns for Visual Basic". ACM SIGPLAN Notices. 43 (10): 5. doi:10.1145/1449955.1449770.
  8. ^ Russo, Claudio V. (23 October 2008). "Join Patterns for Visual Basic". ACM SIGPLAN Notices. 43 (10): 18. doi:10.1145/1449955.1449770.
  9. ^ a b c Maranget, Luc; Le Fessant, Fabrice (25 September 2007). "Compiling Join-Patterns". Le Chesnay France. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  10. ^ Fournet, Cédric; Gonthier, Georges; Levy, Jean-Jacques; Maranget, Luc (1996). CONCUR '96: Concurrency Theory. Lecture Notes in Computer Science. Vol. 1119. Le Chesnay: Concurrency Theory. pp. 406–421. doi:10.1007/3-540-61604-7_67. ISBN 978-3-540-61604-7.
  11. ^ Fournet, Cedric; Le Fessant, Fabrice; Maranget, Luc; Schmitt, A. (September 2000). "JoCaml: a language for concurrent distributed and mobile programming". In Advanced Functional Programming, 4th International SchoolOxford, August 2002. 2638.
  12. ^ Conchon, S.; Le Fessant, F. (1999). "JoCaml: Mobile agents for Objective-Caml". In First International Symposium on AgentSystems and Applications. (ASA'99)/Third International Symposium OnMobile Agents (MA'99).
  13. ^ Odersky, Martin (September 2000). "An overview of functional nets". Summer School, Caminha, Portugal, September 2000. 2395.
  14. ^ Odersky, Martin (2000). "Functional nets". In Proceedings of the European Symposium on Programming. Lecture Notes in Computer Science. Lecture Notes in Computer Science. 1782: 1–25. doi:10.1007/3-540-46425-5_1. ISBN 978-3-540-67262-3.
  15. ^ Itzstein, G. S.; Kearney, D. (2001). "Join Java: An alternative concurrency semantics for Java". Echnical Report ACRC-01-001, University of South Australia.
  16. ^ Benton, N.; Fournet, C. (June 2002). "Modern concurrency abstractions for C#". In Proceedings of the 16th European Conference on Object-Oriented Programming (ECOOP 2002), Number 2374 in LNCS.
  17. ^ Benton, N.; Cardelli, L. (2004). "Modern Concurrency Abstractions for C#. ACM Transactions on Programming Languages and Systems". 26. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  18. ^ Singh, Satnam (6 January 2007). "Higher Order Combinators for Join Patterns using STM": 1. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  19. ^ a b Aaron, Turon; Russo, Claudio V. (27 October 2011). Scalable Join Patterns (PDF). Portland, Oregon, USA. p. 4. ISBN 9781450309400.
  20. ^ Aaron, Turon; Russo, Claudio V. (27 October 2011). Scalable Join Patterns (PDF). Portland, Oregon, USA. p. 1. ISBN 9781450309400.
  21. ^ a b Aaron, Turon; Russo, Claudio V. (27 October 2011). Scalable Join Patterns (PDF). Portland, Oregon, USA. p. 3. ISBN 9781450309400.
  22. ^ Aaron, Turon; Russo, Claudio V. (27 October 2011). Scalable Join Patterns (PDF). Portland, Oregon, USA. p. 2. ISBN 9781450309400.
  23. ^ a b c Fournet, Cédric; Gonthier, Georges; Levy, Jean-Jacques; Maranget, Luc; Remy, Didier (1996). CONCUR '96: Concurrency Theory. Lecture Notes in Computer Science. Vol. 1119. Le Chesnay: Concurrency Theory. pp. 406–421. doi:10.1007/3-540-61604-7_67. ISBN 978-3-540-61604-7.
  24. ^ Maludzinski, Slawomir; Dobrowolski, Grzegorz (2007). "Agent Environment and Knowledge in Distributed Join Calculus". Multi-Agent Systems and Applications V. Lecture Notes in Computer Science. Vol. 4696. pp. 298–300. doi:10.1007/978-3-540-75254-7_30. ISBN 978-3-540-75253-0.
  25. ^ Ma, Qin; Maranget, Luc (5 April 2004). CONCUR 2004 - Concurrency Theory. Lecture Notes in Computer Science. Vol. 3170. INRIA. pp. 417–431. CiteSeerX 10.1.1.499.8443. doi:10.1007/978-3-540-28644-8_27. ISBN 978-3-540-22940-7.
  26. ^ a b c Haller, Phillip; Van Cutsem, Tom (2008). Coordination Models and Languages. Lecture Notes in Computer Science. Vol. 5052. Lausanne: Coordination Models and Languages. pp. 1–15. CiteSeerX 10.1.1.210.1242. doi:10.1007/978-3-540-68265-3_9. ISBN 978-3-540-68264-6.
  27. ^ a b c Russo, Claudio V. (23 October 2008). "Join Patterns for Visual Basic". ACM SIGPLAN Notices. 43 (10): 53–72. doi:10.1145/1449955.1449770.
  28. ^ a b c Sulzmann, Martin; S. L. Lam, Edmund. "Parallel Join Patterns with Guards and Propagation". Denmark. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  29. ^ Hopf, J.; von Itzstein, G.; Stewart, al. (2002). "Hardware Join Java: A High Level Language For Reconfigurable Hardware Development". Hong Kong. Archived from the original on 2013-02-19. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  30. ^ Plociniczak, Hubert; Eisenbach, Susan (2009). "JErlang: Erlang with Joins". Lecture Notes in Computer Science. London. 6116: 61–75. Bibcode:2010LNCS.6116...61P. doi:10.1007/978-3-642-13414-2_5. ISBN 978-3-642-13413-5.
  31. ^ Liu, Yigong (2007–2009). "Join - Asynchronous Message Coordination and Concurrency Library". Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  32. ^ "Introduction to Polyphonic C#". Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  33. ^ "Parallel C#". Archived from the original on 2013-11-26. Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  34. ^ Hanus, Michael (January 2007). The Joins Concurrency Library. Vol. 4354. ISBN 9783540696087. Retrieved 2012. {{cite book}}:날짜 값 확인: access-date=(도움말)
  35. ^ "Comega". Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  36. ^ Aaron, Turon; Russo, Claudio V. (27 October 2011). Scalable Join Patterns (PDF). Portland, Oregon, USA. ISBN 9781450309400.
  37. ^ Fournet, Cedric; Le Fessant, Fabrice; Maranget, Luc; Schmitt, Alan (2003). "JoCaml: a Language for Concurrent Distributed and Mobile Programming" (PDF). Advanced Functional Programming. Lecture Notes in Computer Science. Springer-Verlag. pp. 129–158.
  38. ^ Hammond/Michaelson/Sun - Hume에서 반응 시스템 프로그래밍
  39. ^ "Concurrent Basic". Archived from the original on 2015-04-25. Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  40. ^ Russio, Claudio (2007). "The Joins Concurrency Library". Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. Vol. 4354. Cambridge: Practical Aspects of Declarative Languages. pp. 260–274. CiteSeerX 10.1.1.187.8792. doi:10.1007/978-3-540-69611-7_17. ISBN 978-3-540-69608-7.
  41. ^ "The Joins Concurrency Library". Retrieved 2012. {{cite web}}:날짜 값 확인: access-date=(도움말)
  42. ^ Haller, Phillip; Odersky, Martin (June 2007). "Actors that unify threads and events". In Proc. Coordination, LNCS. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  43. ^ MONSIEUR, Geert (2010), Pattern-based Coordination in Process-based Service Compositions, Leuven Belgium: Katholiek Universiteit Leuven, p. 68
  44. ^ MONSIEUR, Geert (2010), Pattern-based Coordination in Process-based Service Compositions, Leuven Belgium: Katholiek Universiteit Leuven, p. 70

외부 링크