배우 모델
Actor model컴퓨터 공학에서 행위자 모형은 행위자를 동시 계산의 보편적인 프리미티브로 취급하는 동시 계산의 수학적 모형이다.수신한 메시지에 응답하여 액터는 로컬 결정, 액터 추가 작성, 메시지 전송 및 다음 수신 메시지에 대한 응답 방법을 결정할 수 있습니다.액터는 자신의 개인 상태를 변경할 수 있지만, (잠금 기반의 동기화가 필요 없음)메시지를 통해서만 서로 간접적으로 영향을 줄 수 있습니다.
배우 모델은 [1]1973년에 시작되었다.연산에 대한 이론적 이해를 위한 프레임워크와 동시 시스템의 몇 가지 실제 구현을 위한 이론적 기초로서 모두 사용되어 왔다.모델과 다른 작업의 관계는 행위자 모델과 프로세스 계산에서 논의됩니다.
역사
Carl Hewitt에 따르면, 이전의 계산 모델과 달리, 배우 모델은 일반 상대성 이론과 양자 [citation needed]역학을 포함한 물리학에서 영감을 받았다.또한 Lisp, Simula, Smalltalk의 초기 버전, 기능 기반 시스템 및 패킷 교환에 영향을 받았습니다.그 개발은 "고성능 통신 [2]네트워크를 통해 통신하는 각각의 로컬 메모리와 통신 프로세서를 갖춘 수십, 수백 또는 수천 개의 독립된 마이크로프로세서로 구성된 고도로 병렬화된 컴퓨팅 머신이 등장할 것이라는 전망에서 비롯되었습니다."그 이후 멀티코어 및 멀티코어 컴퓨터 아키텍처를 통한 대규모 동시화가 등장하면서 배우 모델에 대한 관심이 되살아났다.
1973년 Hewitt, Bishop 및 Steiger의 출판에 이어 Irene Greif는 박사학위 [3]연구의 일환으로 배우 모델에 대한 운영적 의미론을 개발했습니다.2년 후, 헨리 베이커와 휴이트는 배우 체계에 [4][5]대한 일련의 자명한 법칙을 발표했다.다른 주요 이정표로는 권력 영역에[2] 기초한 표현적 의미론을 소개한 1981년 William Clinger의 논문과 Clinger를 [6]보완하는 전환 기반 의미 모델을 더욱 개발한 Gul Agha의 1985년 논문 등이 있다.이것은 배우 모델 이론의 완전한 발전을 가져왔다.
주요 소프트웨어 구현 작업은 매사추세츠의 Message passing Symantics Institute에서 Russ Atkinson, Giuseppe Attardi, Henry Barber, Peter De Jong, Ken Kahn, Henry Liberman, Carl Manning, Tom Reinhard, Richard Steiger 및 Dan Theriault에 의해 수행되었습니다.캘리포니아 공과대학(Caltech)의 Chuck Seitz와 MIT의 Bill Dally가 이끄는 연구 그룹은 모델에 전달되는 메시지를 더욱 발전시키는 컴퓨터 아키텍처를 구축했습니다.Actor 모델 구현을 참조하십시오.
그 배우 모델에 관한 연구 캘리포니아 공과 대학의 교토 대학 Tokoro 연구소, Microelectronics 컴퓨터 기술 공단(MCC), MIT인공 지능 연구소, 특수 첩보 요구, 스탠퍼드 대학 일리노이 대학교 Urbana–Champaign,[7]피에르와 마리 퀴리 대학(대학 파리에 수행해 왔다.s6피사 대학, 도쿄 대학 요네자와 연구소, 센트룸 위스쿤데 인포매티카(CWI) 등.
기본 개념
배우 모델은 모든 것이 배우라는 철학을 채택한다.이것은 모든 것이 일부 객체 지향 프로그래밍 언어에서 사용되는 객체 철학인 것과 유사합니다.
행위자는 받는 메시지에 응답하여 동시에 다음을 수행할 수 있는 계산 엔티티입니다.
- 다른 배우에게 한정된 수의 메시지를 보냅니다.
- 한정된 수의 새로운 배우를 창조한다.
- 수신하는 다음 메시지에 사용할 동작을 지정합니다.
상기 조치에는 가정된 시퀀스가 없으며 병행하여 수행될 수 있다.
송신자를 송신된 통신으로부터 떼어낸 것은,[8] 전달 메시지의 패턴으로서 비동기 통신과 제어 구조를 가능하게 하는 행위자 모델의 근본적인 진보였습니다.
메시지의 수신인은 주소로 식별되며, "메일 주소"라고도 합니다.따라서 배우는 주소를 가진 배우들과만 의사소통을 할 수 있다.수신한 메시지 또는 주소가 자신이 작성한 배우용 주소인 경우 메시지에서 가져올 수 있습니다.
행위자 모델은 행위자 내 및 행위자 간의 계산의 내재적 동시성, 행위자의 동적 생성, 메시지에 행위자 주소의 포함, 메시지 도착 순서에 제약이 없는 직접적인 비동기 메시지 전달을 통해서만 상호작용하는 것이 특징이다.
정식 시스템
수년간, 행위자 모델의 시스템에 대한 추론을 허용하는 몇 가지 다른 공식 시스템이 개발되었다.여기에는 다음이 포함됩니다.
다음을 포함한 메시지의 보장 전달을 공식화하지 않는다는 점에서 행위자 모델에 완전히 충실하지 않은 형식주의도 있다(행위자 의미론을 대수 및 선형 논리에 관련짓기 위한 시도 참조).
적용들
액터 모델은 광범위한 동시 [15]시스템에 대한 모델링, 이해 및 추론을 위한 프레임워크로 사용할 수 있습니다.예를 들어 다음과 같습니다.
- 이메일(이메일)을 액터 시스템으로 모델링할 수 있습니다.계정은 배우로, 이메일 주소는 배우 주소로 모델링됩니다.
- 웹 서비스는 행위자 주소로 모델링된 SOAP(Simple Object Access Protocol) 엔드포인트로 모델링할 수 있습니다.
- (Java 나 C# 등) 잠금이 있는 오브젝트는 메시지가 계속 도착(내부 큐에 저장됨)할 수 있는 경우 시리얼라이저로 모델링할 수 있습니다.시리얼라이저는 새로운 메시지가 도착할 때까지 계속 사용할 수 있는 속성에 의해 정의되는 중요한 유형의 액터입니다.시리얼라이저로 전송되는 모든 메시지는 확실하게 [16]도착합니다.
- TTCN-2와 TTCN-3의 Testing and Test Control Numption(TTCN; 테스트 및 테스트 제어 표기법)은 액터 모델에 상당히 근접해 있습니다.TTCN에서 액터는 테스트 컴포넌트(PTC) 또는 메인 테스트 컴포넌트(MTC) 중 하나입니다.테스트 컴포넌트는 리모트파트너(피아 테스트컴포넌트 또는 테스트시스템 인터페이스)와 메시지를 송수신 할 수 있으며, 리모트파트너는 주소로 식별됩니다.각 테스트 컴포넌트에는 동작 트리가 바인드되어 있습니다.테스트 컴포넌트는 병렬로 실행되며 부모 테스트 컴포넌트에 의해 동적으로 생성될 수 있습니다.내장 언어 구조를 사용하면 내부 메시지큐에서 예상되는 메시지를 수신했을 때 수행할 액션을 정의할 수 있습니다.예를 들어 메시지를 다른 피어 엔티티에 송신하거나 새로운 테스트컴포넌트를 작성할 수 있습니다.
메시지 전달 의미론
액터 모델은 메시지 전달의 의미에 관한 것입니다.
무한 비결정론 논쟁
최초의 동시 프로그램은 인터럽트 핸들러였습니다.통상의 동작중에, 컴퓨터는 외부로부터의 정보(키보드로부터의 문자, 네트워크로부터의 패킷등)를 수신할 수 있어야 했습니다.따라서 정보가 도착했을 때 컴퓨터의 실행이 중단되고 이후 정보를 얻을 수 있는 데이터 버퍼에 정보를 저장하기 위해 특수 코드(인터럽트 핸들러라고 함)가 호출되었습니다.
1960년대 초에 인터럽트는 하나의 프로세서 [17]상에서 여러 프로그램을 동시에 실행하는 시뮬레이션을 위해 사용되기 시작했습니다.공유 메모리와의 동시성이 원인으로, 동시성 제어의 문제가 발생했습니다.원래 이 문제는 단일 컴퓨터에서 상호 배타적인 것으로 생각되었습니다.Edsger Dijkstra는 세마포어를 개발했고 1971년부터 1973년 사이에 [18]Tony Hoare와[19] Per Brinch[20] Hansen은 상호 배타적인 문제를 해결하기 위해 모니터를 개발했습니다.그러나 이러한 솔루션 중 어느 것도 공유 리소스에 대한 액세스를 캡슐화하는 프로그래밍 언어 구조를 제공하지 않았습니다.이 캡슐화는 나중에 직렬화 구조([Hewitt and Atkinson 1977, 1979] 및 [Atkinson 1980])에 의해 수행되었다.
계산의 첫 번째 모델(예: 튜링 기계, 포스트 프로덕션, 람다 미적분 등)은 수학에 기초했으며 계산 단계를 나타내기 위해 전역 상태를 사용했다(나중에 [McCarthy and Hayes 1969] 및 [Dijkstra 1976]에서 일반화됨).각 계산 단계는 계산의 하나의 글로벌 상태에서 다음 글로벌 상태로 이동했습니다.글로벌 상태 접근방식은 유한 상태 머신과 비결정적 버전을 포함한 푸시다운 스택 머신에 대한 오토마타 이론에서 계속되었다.이러한 비결정적 오토마타는 유계적 비결정론의 속성을 가지고 있습니다.즉, 기계가 초기 상태에서 항상 정지할 때 정지하면 정지하는 상태의 수에 한계가 있습니다.
Edsger Dijkstra는 비결정론적 글로벌 상태 접근법을 더욱 발전시켰다.Dijkstra의 모델은 요청이 최종적으로 처리되는 것을 보증하면서 공유 자원에 대한 경합 조정의 결과로 요청을 처리하는 지연의 양이 무제한이 될 수 있는 동시성의 속성인 무제한 비결정론에 관한 논쟁을 일으켰다.휴이트는 배우 모델이 서비스를 보장해야 한다고 주장했다.Dijkstra의 모델에서, 비록 컴퓨터에서 순차 명령의 실행 사이에 무한한 시간이 있을 수 있지만, 잘 정의된 상태에서 시작된 (병렬) 프로그램은 제한된 수의 상태에서만 종료될 수 있습니다 [Dijkstra 1976].따라서 그의 모형은 용역을 보장할 수 없었다.Dijkstra는 무한 비결정론을 실행하는 것은 불가능하다고 주장했다.
Hewitt는 이와는 달리 아비터라고 불리는 계산회로가 안착하는 데 걸리는 시간에 대한 경계가 없다고 주장했다(준안정성(전자학)[21] 참조).컴퓨터에서는 키보드 입력, 디스크 액세스, 네트워크 입력 등 외부로부터의 입력에 대해 컴퓨터 클럭이 비동기적으로 동작하는 상황에 대처하기 위해 아비트레이터가 사용됩니다.따라서 컴퓨터로 전송되는 메시지를 수신하는 데 무제한의 시간이 걸릴 수 있으며, 그 동안 컴퓨터는 무제한의 상태를 통과할 수 있습니다.
배우 모델은 윌 [2]클링거가 영역 이론을 이용해 수학적 모델에서 포착한 무한 비결정론을 특징으로 한다.배우 모델에는 글로벌 [dubious ]상태가 없습니다.
직접 통신 및 비동기
액터 모델의 메시지는 반드시 버퍼링되지 않습니다.이는 동시 연산 모델에 대한 이전의 접근 방식과는 확연히 다른 것이었다.버퍼링 부족은 배우 모델 개발 당시 많은 오해를 불러일으켰고 지금도 논란이 되고 있다.일부 연구자들은 메시지가 "이더" 또는 "환경"에서 버퍼링된다고 주장했다.또, 액터 모델의 메세지는 간단하게 송신됩니다(IP 의 패킷 등).수신자와의 동기 핸드쉐이크를 실시할 필요는 없습니다.
액터 작성과 메시지의 주소 추가는 가변 토폴로지를 의미합니다.
배우 모델의 자연스러운 발전은 메시지의 주소를 허용하는 것이었다.패킷 교환 네트워크[1961 및 1964]의 영향을 받은 Hewitt는 통신에 필수 필드가 전혀 없는 새로운 동시 계산 모델의 개발을 제안했습니다: 그것들은 비어 있을 수 있습니다.물론, 통신의 송신자가 수신자가 아직 가지고 있지 않은 주소에 액세스 할 수 있도록 하고 싶은 경우는, 그 주소를 통신으로 송신할 필요가 있습니다.
예를 들어, 액터는 나중에 응답을 수신할 것으로 예상되는 수신측 액터에게 메시지를 송신할 필요가 있지만, 실제로는 응답을 수신 및 처리하도록 설정된 제3 액터 컴포넌트(예를 들어 옵저버 패턴을 구현하는 다른 액터)에 의해 응답이 처리됩니다.원래의 액터는, 응답을 처리하는 제3 액터의 주소와 함께, 송신하고 싶은 메시지를 포함한 통신을 송신하는 것으로, 이것을 달성할 수 있습니다.응답을 처리하는 이 세 번째 액터는 resumption(계속 또는 스택프레임이라고도 불립니다).수신측 액터는 응답을 송신할 준비가 되면, 원래의 통신에 포함되어 있던 재개 액터 주소로 응답 메시지를 송신합니다.
그래서, 그들이 의사소통을 주고받을 수 있는 새로운 배우를 창조하는 능력, 메시지에 다른 배우의 주소를 포함시키는 능력, 그리고 배우들은 Simula와 다른 객체 지향 언어의 객체처럼 서로 임의적으로 가변적인 위상 관계를 만들고 참여할 수 있는 능력을 준다.ges는 메시지 교환 객체의 가변 토폴로지로 관계적으로 구성될 수도 있습니다.
본질적으로 동시
순차 프로세스를 구성하는 이전의 접근 방식과 달리, 행위자 모델은 본질적으로 동시 모델로 개발되었습니다.행위자 모델에서 순차성은 행위자 모델 이론에서 설명되는 동시 계산에서 파생된 특별한 경우였다.
메시지 도착 순서에 대한 요구사항 없음
Hewitt는 메시지가 배우에게 전송되는 순서대로 도착해야 한다는 요구사항을 추가하는 것에 반대했다.출력 메시지의 순서를 지정하는 경우는, 이 기능을 제공하는 큐액터로 모델화할 수 있습니다.이러한 큐 액터는 FIFO 순서로 취득할 수 있도록 도착한 메시지를 큐잉합니다.그래서 만약 배우가X
메시지를 보냈다M1
배우에게Y
, 이후X
다른 메시지를 보냈습니다.M2
로.Y
, 라고 하는 요건은 없습니다.M1
도착하다Y
전에M2
.
이 점에서 액터 모델은 패킷이 전송된 순서대로 수신되어야 한다는 것을 보증하지 않는 패킷 교환 시스템을 미러링합니다.전달 보증을 제공하지 않으면 패킷이 버퍼 패킷으로 스위칭되거나 여러 경로를 사용하여 패킷을 전송하거나 손상된 패킷을 재발송하거나 기타 최적화할 수 있습니다.
예를 들어, 행위자는 메시지 처리의 파이프라인을 사용할 수 있습니다.이게 의미하는 건 메시지를 처리하는 과정에서M1
행위자는 다음 메시지를 처리하기 위해 사용되는 동작을 지정할 수 있으며, 실제로 다른 메시지 처리를 시작할 수 있습니다.M2
처리가 끝나기 전에M1
행위자가 메시지 처리를 파이프라인으로 할 수 있다고 해서 그 처리를 파이프라인으로 할 필요가 있는 것은 아닙니다.메시지가 파이프라인 되어 있는지 여부는 엔지니어링의 트레이드오프입니다.외부 관찰자는 배우의 메시지 처리가 파이프라인으로 이루어졌는지 어떻게 알 수 있습니까?파이프라인의 가능성에 의해 만들어진 배우의 정의에는 모호함이 없다.물론 일부 구현에서는 파이프라인 최적화가 잘못 수행될 수 있으며, 이 경우 예기치 않은 동작이 발생할 수 있습니다.
지역
배우 모델의 또 다른 중요한 특징은 지역성이다.
로컬리티란 메시지를 처리할 때 액터는 메시지로 수신한 주소, 메시지를 수신하기 전에 이미 가지고 있던 주소 및 메시지 처리 중에 작성한 액터 주소에만 메시지를 보낼 수 있음을 의미합니다.(단, 배우 주소 합성을 참조하십시오.)
또, locality는, 복수의 로케이션에서 동시에 변경이 없는 것을 의미합니다.이러한 방식으로 토큰이 여러 위치에서 동시에 제거되고 다른 위치에 배치되는 Petri net 모델 등 다른 동시성 모델과는 다릅니다.
배우 시스템 구성
배우 시스템을 더 큰 시스템으로 구성한다는 생각은 나중에 굴 아그하, 이안 메이슨, 스콧 스미스, 캐롤린 [9]탈콧에 의해 개발된 굴 아그하의 박사학위 [6]논문에서 개발된 모듈화의 중요한 측면이다.
동작
핵심 혁신은 행위자가 메시지를 처리할 때 무엇을 하는지 표현하기 위해 수학적 함수로 지정된 행동을 도입하는 것이었다. 여기에는 다음 메시지를 처리하기 위한 새로운 행동을 지정하는 것이 포함된다.행동은 동시성 공유를 수학적으로 모델링하는 메커니즘을 제공했다.
또한 동작은 행위자 모델을 구현 세부 사항으로부터 해방시켰습니다. 예를 들어, Smalltalk-72 토큰 스트림 인터프리터입니다.그러나 행위자 모델에 의해 기술된 시스템의 효율적인 구현에는 광범위한 최적화가 필요하다는 것을 이해하는 것이 중요하다.자세한 내용은 Actor 모델 구현을 참조하십시오.
다른 동시성 시스템 모델링
다른 동시성 시스템(예를 들어 프로세스 계산)은 2상 커밋 [22]프로토콜을 사용하여 액터 모델에서 모델링할 수 있습니다.
계산표현정리
액터 모델에는 외부로부터 통신을 수신하지 않는다는 의미에서 닫힌 시스템에 대한 계산 표현 정리가 있습니다.닫힌 S로 나타나는 수학적 표현은 초기 동작으로 구성됩니다.⊥S
행동 근사 함수와progressionS
. 이들은 점점 더 나은 근사치를 얻고 다음과 같이S {\ {S에 대한 표현(의미)을 구성합니다 [Hewitt 2008; Clinger 1981:
이렇게 해서S
수학적으로 가능한 모든 행동(무제한 비결정론을 포함하는 행동 포함)의 관점에서 특징지을 수 있다.Although is not an implementation of , it can be used to prove a generalization of the Church-Turing-Rosser-Kleene thesis [Kleene 1943]:
상기 정리의 결과로 유한 행위자는 셀 수 없는[clarify] 수의 다른 출력으로 비결정적으로 응답할 수 있다.
논리 프로그래밍과의 관계
배우 모델 개발의 주요 동기 중 하나는 Planner 프로그래밍 [citation needed]언어 개발에서 발생한 제어 구조 문제를 이해하고 대처하는 것이었습니다.배우 모델이 처음 정의되었을 때, 중요한 과제는 "연산은 추론에 의해 포함될 수 있다"는 로버트 코왈스키의 논지와 관련된 모델의 힘을 이해하는 것이었다.Hewitt는 Kowalski의 논문이 행위자 모델의 동시 연산에 대해 거짓으로 밝혀졌다고 주장했다.
그럼에도 불구하고, 논리 프로그래밍을 동시 연산으로 확장하려는 시도가 있었다.그러나 Hewitt와 Agha[1991년]는 결과 시스템이 다음과 같은 의미에서 연역적이지 않다고 주장했다. 동시 논리 프로그래밍 시스템의 계산 단계는 이전 단계로부터 연역적으로 따르지 않는다(동시 계산의 불확정성 참조).최근 논리 프로그래밍은 논리적 [21]의미를 유지하는 방식으로 행위자 모델에 통합되었습니다.
이행
액터 모델에서의 이행은 액터가 장소를 변경할 수 있는 능력입니다.예를 들면, 요네자와 아키씨는 논문에서, 고객의 행위자가 출입할 수 있는 우체국을 모델화해, 영업중의 장소 변경, 퇴출등을 실시했습니다.이행할 수 있는 액터는 이행할 때 변경되는 위치 액터를 갖는 것으로 모델링할 수 있습니다.그러나 이 모델의 충실성은 논란의 여지가 있으며 연구 [citation needed]대상이다.
보안.
이 섹션은 확인을 위해 추가 인용문이 필요합니다.(2021년 ( 템플릿메시지 및 ) |
행위자의 보안은 다음과 같은 방법으로 보호될 수 있습니다.
- 배우가 물리적으로 연결되어 있는 배선
- Burroughs B5000, 리스프 기계 등 컴퓨터 하드웨어
- Java 가상 머신, 공통 언어 런타임 등의 가상 머신에서 사용할 수 있습니다.
- 기능 기반 시스템과 같은 운영 체제
- 행위자 및 그 주소의 서명 및/또는 암호화
배우 주소 합성
배우 모델의 미묘한 점은 배우의 주소를 합성하는 능력이다.경우에 따라서는, 주소의 합성을 막기 위해서 시큐러티를 사용할 수 있습니다( 「보안」을 참조).그러나 배우 주소가 단순히 비트 문자열일 경우, 비트 문자열이 충분히 길면 배우의 주소를 추측하기가 어렵거나 심지어 불가능할 수도 있지만 분명히 합성될 수 있다.SOAP에서는 액터에 도달할 수 있는 엔드포인트주소에 URL을 사용합니다.URL은 문자열이기 때문에 암호화로 인해 추측이 사실상 불가능할 수 있지만 명확하게 합성할 수 있습니다.
배우들의 주소를 합성하는 것은 보통 매핑을 사용하여 모델링됩니다.아이디어는 실제 배우 주소에 대한 매핑을 수행하기 위해 배우 시스템을 사용하는 것입니다.예를 들어 컴퓨터에서는 컴퓨터의 메모리 구조를 매핑을 하는 액터 시스템으로 모델링할 수 있습니다.SOAP 주소의 경우 DNS 및 나머지 URL 매핑을 모델링합니다.
다른 메시지 전달 동시성 모델과의 대조
동시성에[23] 관한 로빈 밀너의 초기 출판물 또한 순차적 과정을 구성하는 것에 기초하지 않았다는 점에서 두드러졌다.그의 작업은 동기 통신을 사용하여 숫자와 문자열을 통신하는 고정된 수의 토폴로지 프로세스를 기반으로 했기 때문에 액터 모델과 달랐다.왜냐하면 시퀜셜 프로세스 고정된 토폴로지로 연결된 고정된 숫자의 병렬 구성에 동기 과정 이름에 따라 message-passing을 사용하여 의사 소통 기반을 두고 있다. 원래 소토 하는 시퀜셜 프로세스(암호화 서비스 공급자)model[24]찰스 앤터니 리처드 호어가 발간한 행위자 모델의( 보배우 모델 및 프로세스 calcul.나는 history)를 클릭합니다.이후 버전의 CSP는 채널을 통한 익명 통신을 위해 프로세스 이름에 기초한 통신을 포기했으며, 통신 시스템의 계산과 µ-calculus에 대한 Milner의 연구에도 사용되었습니다.
밀너와 호어의 이러한 초기 모델들은 둘 다 한계 비결정론의 특성을 가지고 있었다.현대적이고 이론적인 CSP([Hoare 1985] 및 [Rosco 2005])는 무제한 비결정론을 명시적으로 제공한다.
페트리 네트와 그 확장 기능(예: 색상 페트리 네트)은 비동기 메시지 전달 및 무제한 비결정주의에 기반한다는 점에서 행위자와 유사하지만, 기본 처리 단계(전환) 및 메시지 저장소(장소)의 고정 토폴로지를 정의한다는 점에서 초기 CSP와 유사하다.
영향을 주다
액터 모델은 이론 개발과 실용적인 소프트웨어 개발 모두에 영향을 미쳤다.
이론.
액터 모델은 θ-calculus 및 후속 프로세스 계산의 개발에 영향을 미쳤다.튜링 강의에서 로빈 밀너는 다음과 같이 썼다.[25]
순수한 람다 계산은 항과 변수 두 가지로 구성됩니다.프로세스 미적분에서도 같은 경제성을 얻을 수 있을까요?그의 배우 모델인 칼 휴이트는 오래 전에 이 도전에 응했습니다. 그는 가치, 가치에 대한 연산자, 그리고 과정은 모두 같은 것이어야 한다고 선언했습니다. 배우입니다.
이 목표는 나에게 깊은 인상을 남겼습니다. 왜냐하면 그것은 표현의 동질성과 완전성을 내포하고 있기 때문입니다.하지만 대수적 미적분학의 관점에서 어떻게 목표를 달성할 수 있는지 알기까지는 한참이 걸렸다.
따라서 Hewitt의 정신에 따라 첫 번째 단계는 용어로 나타내거나 이름으로 액세스되는 모든 것(값, 레지스터, 연산자, 프로세스, 객체)을 같은 종류로 만드는 것입니다. 이 모든 것은 프로세스여야 합니다.
연습
배우 모델은 상업적인 관행에 광범위한 영향을 끼쳤다.예를 들어,[26] Twitter는 확장성을 위해 액터를 사용했습니다.또한 Microsoft는 비동기 에이전트 라이브러리 [27]개발에 액터 모델을 사용하고 있습니다.아래 액터 라이브러리와 프레임워크 섹션에 다른 액터 라이브러리가 많이 있습니다.
해결된 문제
Hewitt[2006]에 따르면 액터 모델은 컴퓨터 및 통신 아키텍처, 동시 프로그래밍 언어 및 웹 서비스의 다음과 같은 문제를 해결합니다.
- scalability: 로컬과 비로컬 모두에서 동시성을 확장하는 과제.
- 투명성: 로컬 동시성과 비 로컬 동시성 사이의 간극을 메웁니다.투명성은 현재 논란이 되고 있는 사안이다.일부 연구자들은[who?] 동시 프로그래밍 언어(예: Java 및 C#)를 사용하는 로컬 동시성과 웹 서비스용 SOAP를 사용하는 비 로컬 동시성 간의 엄격한 분리를 주장해 왔습니다.엄밀하게 분리하면 투명성이 부족하여 웹 서비스에 대한 로컬 액세스와 비 로컬 액세스를 변경해야 할 경우 문제가 발생합니다(분산 컴퓨팅 참조).
- 불일치: 불일치는 인간의 정보 시스템 상호작용에 관한 모든 대규모 지식 시스템이 불일치하기 때문에 표준입니다.이 불일치는 내부적으로는 일관성이 없는 매우 큰 시스템(Microsoft Windows 소프트웨어 등)의 문서와 사양에까지 확대됩니다.
행위자 모델에 도입된 많은 아이디어들은 현재 이와 같은 이유로 멀티 에이전트 시스템에서도 적용되고 있습니다 [Hewitt 2006b 2007b].주요 차이점은 에이전트시스템(대부분의 정의에서)은 액터에게 추가적인 제약을 가하고 일반적으로 액터에게 약속과 목표를 사용하도록 요구한다는 것입니다.
배우와의 프로그래밍
많은 다른 프로그래밍 언어가 액터 모델 또는 액터 모델의 일부 변형을 사용합니다.이러한 언어는 다음과 같습니다.
초기 배우 프로그래밍 언어
후기 배우 프로그래밍 언어
액터 라이브러리 및 프레임워크
배우 라이브러리 또는 프레임워크는 배우를 내장하지 않은 언어로 배우 스타일의 프로그래밍을 허용하기 위해 구현되었습니다.이러한 프레임워크에는 다음과 같은 것이 있습니다.
이름. | 상황 | 최신 릴리즈 | 면허증. | 언어들 |
---|---|---|---|---|
동작했다 | 활동적인 | 2021-09-05 | 아파치 2.0 | 자바 |
액터 | 활동적인 | 2020-04-16[47] | Apache-2.0 / MIT | 녹 |
바스티온 | 활동적인 | 2020-08-12[48] | Apache-2.0 / MIT | 녹 |
액틱스 | 활동적인 | 2020-09-11[49] | MIT | 녹 |
아오젯 | 활동적인 | 2016-10-17 | MIT | 재빠르다 |
배우. | 활동적인 | 2017-03-09 | MIT | 자바 |
배우4j | 활동적인 | 2020-01-31 | 아파치 2.0 | 자바 |
액터 | 활동적인 | 2019-04-09[50] | 아파치 2.0 | 자바 |
Vert.x | 활동적인 | 2018-02-13 | 아파치 2.0 | 자바, 그루비, 자바스크립트, 루비, 스칼라, 코틀린, 실론 |
ActorFx | 활발하지 않은 | 2013-11-13 | 아파치 2.0 | .그물 |
아카(툴킷) | 활동적인 | 2019년[51] 5월 21일 | 아파치 2.0 | 자바 및 스칼라 |
Akka.NET | 활동적인 | 2020-08-20[52] | 아파치 2.0 | .그물 |
닷네타 | 활동적인 | 2021-06-14 | MIT | .NET, C#, Azure 서비스 버스 |
Remact.Net | 활발하지 않은 | 2016-06-26 | MIT | .NET, Javascript |
아테지 PX | 활발하지 않은 | ? | ? | 자바 |
czmq | 활동적인 | 2016-11-10 | MPL-2 | C |
F# 우편함 프로세서 | 활동적인 | F#과 동일(내장 코어 라이브러리) | Apache 라이선스 | F# |
코루스 | 활동적인 | 2010-02-04 | GPL 3 | 자바 |
킬림[53] | 활동적인 | 2018-11-09[54] | MIT | 자바 |
Actor Foundry (Kilim 기반) | 활발하지 않은 | 2008-12-28 | ? | 자바 |
액터킷 | 활동적인 | 2011-09-13[55] | BSD | 목표-C |
클라우드 해스켈 | 활동적인 | 2015-06-17[56] | BSD | 하스켈 |
클라우드I | 활동적인 | 2021-05-27[57] | MIT | ATS, C/C++, Elixir/Erlang/LFE, Go, Haskell, Java, Javascript, OCaml, Perl, PHP, Python, Ruby |
어수선하다 | 활동적인 | 2017년[58] 5월 12일 | LGPL 2.1 | C, C++(clutermm), Python(pycluter), Perl(perl-Clutter) |
동작하지 않다 | 활발하지 않은 | 2012-02-28 | LGPL 3.0 | .그물 |
액트 | 활동적인 | 2018-06-06[59] | 아파치 2.0 | JavaScript/ReasonML |
리트랑 | 활발하지 않은 | 2011년[60] 5월 18일 | 새로운 BSD | .그물 |
JACTOR | 활발하지 않은 | 2013-01-22 | LGPL | 자바 |
제트랑 | 활동적인 | 2013년[61] 5월 30일 | 새로운 BSD | 자바 |
하스켈 배우 | 액티브? | 2008 | 새로운 BSD | 하스켈 |
GPars | 활동적인 | 2014-05-09[62] | 아파치 2.0 | 그루비 |
동작 | 활동적인 | 2019-05-09[63] | GPL 2.0 및 상용 (듀얼 라이선스) | C. C++ 프렌들리 |
파니니 | 활동적인 | 2014-05-22 | MPL 1.1 | 프로그래밍 언어 자체 |
팔리 | 액티브? | 2007-22-07 | GPL 2.1 | 파이썬 |
퍼네틱 | 활동적인 | 2007-06-29 | LGPL 3.0 | 자바 |
피코 | 활동적인 | 2020-02-04 | MIT | KRL |
샤프 후 | 활동적인 | 2014-09-24 | 상용/프리미엄 | .그물 |
펄서 | 활동적인 | 2016-07-09[64] | 새로운 BSD | 파이썬 |
펄서 | 활동적인 | 2016년[65] 2월 18일 | LGPL/Eclipse | 클로쥬르 |
파이카 | 활동적인 | 2019-05-07[66] | 아파치 2.0 | 파이썬 |
흰개미 스킴 | 액티브? | 2009-05-21 | LGPL | 스킴(Gambit 실장) |
테론 | 비액티브[67] | 2014년[68] 1월 |