메시지 전달
Message passing컴퓨터 과학에서 메시지 전달은 컴퓨터에서 동작(즉, 프로그램 실행)을 호출하는 기술입니다.호출 프로그램은 프로세스(액터 또는 객체일 수 있음)에 메시지를 전송하고 해당 프로세스와 지원 인프라스트럭처에 의존하여 적절한 코드를 선택하고 실행합니다.메시지 전달은 프로세스, 서브루틴 또는 함수가 이름으로 직접 호출되는 기존 프로그래밍과 다릅니다.메시지 전달은 일부 동시성 및 객체 지향 프로그래밍 모델의 핵심입니다.
메시지 전달은 현대 컴퓨터 [citation needed]소프트웨어 어디에서나 볼 수 있습니다.프로그램을 구성하는 오브젝트가 서로 동작하는 방법 및 서로 다른 컴퓨터(예: 인터넷)에서 실행되는 오브젝트와 시스템이 상호 작용하는 수단으로 사용됩니다.메시지 전달은 채널을 포함한 다양한 메커니즘에 의해 구현될 수 있습니다.
개요
메시지 전달은 컴퓨터에서 동작(즉, 프로그램 실행)을 호출하는 기술입니다.이름으로 프로그램을 호출하는 전통적인 기법과 달리, 메시지 전달은 객체 모델을 사용하여 일반적인 기능을 특정 구현과 구별합니다.호출 프로그램은 메시지를 전송하고 개체를 사용하여 적절한 코드를 선택하고 실행합니다.중간 레이어를 사용하는 이유는 기본적으로 캡슐화와 배포의 두 가지 범주로 분류됩니다.
캡슐화란 소프트웨어 오브젝트가 다른 오브젝트 상에서 서비스를 호출할 수 있어야 한다는 개념입니다.이러한 서비스는 어떻게 구현되어 있는지 알거나 상관하지 않습니다.캡슐화를 통해 코딩 로직의 양을 줄이고 시스템의 유지보수를 보다 용이하게 할 수 있습니다.예를 들어 개발자를 호출할 서브루틴 또는 함수를 결정하는 IF-THEN 문을 사용하는 대신 개체는 개체 유형에 따라 적절한 코드를 선택합니다.
이것이 어떻게 사용될 수 있는지에 대한 첫 번째 예 중 하나는 컴퓨터 그래픽스 분야였다.그래픽 오브젝트 조작에는 다양한 복잡성이 있습니다.예를 들어, 올바른 공식을 사용하여 닫힌 형상의 면적을 계산하는 것은 형상이 삼각형인지, 직사각형인지, 타원인지 또는 원인지에 따라 달라집니다.기존의 컴퓨터 프로그래밍에서는 긴 IF-THEN 문이 어떤 종류의 물체인지 테스트하고 적절한 코드를 호출합니다.이를 처리하기 위한 객체 지향적인 방법은 다음과 같은 클래스를 정의하는 것입니다.Shape
등의 하위 분류와 함께Rectangle
그리고.Ellipse
(그것은 차례로 서브클래스를 가지고 있다.Square
그리고.Circle
)를 사용하여 메시지를 전송합니다.Shape
면적을 계산해달라고 부탁하는 거죠각각Shape
그런 다음 오브젝트는 [1]해당 오브젝트에 적합한 수식을 사용하여 서브클래스의 메서드를 호출합니다.
분산 메시지 전달은 서로 다른 장소와 시간에 서로 다른 컴퓨터에서 실행되는 하위 시스템으로 구성된 시스템을 구축하기 위한 공통 서비스를 제공하는 아키텍처 계층을 개발자에게 제공합니다.분산 개체가 메시지를 보낼 때 메시징 계층은 다음과 같은 문제를 처리할 수 있습니다.
- 메시지가 생성된 장소와는 다른 운영 체제 및 프로그래밍 언어를 사용하여 프로세스를 검색합니다.
- 메시지를 처리할 적절한 개체가 현재 실행되고 있지 않은 경우 메시지를 큐에 저장하고 개체를 사용할 수 있을 때 메시지를 호출합니다.또, 송신측 오브젝트가 수신할 준비가 될 때까지, 필요에 따라서 결과를 보존합니다.
- 데이터를 테스트하는 원자성, 일관성, 격리,[2] 내구성(ACID) 등 분산 트랜잭션의 다양한 트랜잭션 요건 제어
동기 메시지 전달과 비동기 메시지 전달
이 섹션은 대부분 또는 전체적으로 단일 소스에 의존합니다. : 전달 · · · · JSTOR (2015년 2월) |
동기 메시지 전달
동기 메시지 전달은 동시에 실행 중인 개체 간에 발생합니다.Java 및 Smalltalk와 같은 객체 지향 프로그래밍 언어에서 사용됩니다.
동기 메시징은 동기 함수 호출과 비슷합니다.함수 발신자가 함수가 완료될 때까지 대기하는 것과 마찬가지로 송신 프로세스는 수신 프로세스가 완료될 때까지 대기합니다.이것에 의해, 일부의 애플리케이션에서는 동기 통신이 기능하지 않게 되는 일이 있습니다.예를 들어, 대규모 분산 시스템은 사용할 수 있을 만큼 성능이 좋지 않을 수 있습니다.이러한 대규모 분산형 시스템은 일부 서브시스템이 유지보수 등의 이유로 다운된 상태에서 가동해야 할 수 있습니다.
100대의 데스크톱 컴퓨터가 동기의 메시지 전달만을 사용하여 서로 이메일을 주고받는 바쁜 비즈니스 오피스를 상상해 보십시오.1명의 종업원이 컴퓨터를 끄면, 1대의 E-메일을 처리하기 위해서 컴퓨터의 전원을 다시 켤 때까지, 나머지 99대의 컴퓨터가 정지하는 일이 있습니다.
비동기 메시지 전달
비동기 메시지를 전달하면 요청 개체가 메시지를 보낼 때 수신 개체가 다운되거나 비지 상태가 될 수 있습니다.함수 호출의 유추를 계속하면 호출된 함수가 완료될 때까지 기다리지 않고 즉시 반환되는 함수 호출과 같습니다.메시지는 수신 프로세스가 요청할 때까지 저장되는 큐로 전송됩니다.수신 프로세스는 메시지를 처리하고 원래 프로세스(또는 일부 지정된 다음 프로세스)[3]에서 픽업하기 위해 결과를 큐에 보냅니다.
비동기 메시징에는 동시에 실행되지 않는 시스템의 데이터를 저장 및 재발송하는 추가 기능이 필요하며 일반적으로 중간 수준의 소프트웨어(흔히 미들웨어라고 불립니다)에 의해 처리됩니다.일반적인 유형은 메시지 지향 미들웨어(MOM)입니다.
비동기 통신에 필요한 버퍼가 가득 차면 문제가 발생할 수 있습니다.발신인을 차단할지, 향후 메시지를 폐기할지 결정해야 합니다.발신인이 차단되면 교착 상태가 될 수 있습니다.메시지가 폐기되면 통신은 더 이상 신뢰할 수 없습니다.
하이브리드
동기 통신은, 동기 통신에 가세해 동기 통신을 구축할 수 있습니다.예를 들어, α-Synchronizer 는, 송신측이 항상 수신측의 확인 응답 메시지를 대기하도록 하는 것으로 동작합니다.발신인은 확인 응답을 수신한 후에만 다음 메시지를 보냅니다.한편, 비동기 통신은 동기 통신 위에 구축될 수도 있습니다.예를 들어, 현대의 마이크로커널은 일반적으로 동기 메시징[citation needed] 프리미티브만 제공하며 비동기 메시징은 도우미 스레드를 사용하여 위에서 구현할 수 있습니다.
분산 객체
메시지 전달 시스템은 분산 개체 또는 로컬 개체를 사용합니다.분산된 오브젝트에서는, 송신자와 수신자가 다른 컴퓨터상에 있는 경우, 다른 operating system을 실행하고 있는 경우, 다른 프로그래밍 언어를 사용하는 경우등이 있습니다.이 경우 버스 계층은 시스템 간에 데이터를 변환하거나 네트워크를 통해 데이터를 송수신하는 등의 세부 사항을 처리합니다.Unix의 Remote Procedure Call(RPC; 리모트프로시저 호출) 프로토콜은 그 초기 예입니다.이러한 유형의 메시지를 전달하면 송신자 또는 수신자가 객체 지향 프로그래밍을 사용할 필요가 없습니다.절차 언어 시스템은 메시지를 [4]송수신할 수 있는 큰 입자로 포장되어 취급될 수 있습니다.
분산 개체를 지원하는 시스템의 예로는 Emerald, ONC RPC, CORBA, Java RMI, DCOM, SOAP, .NET Remoting, CTOS, QNX Neutrino RTOS, OpenBinder 및 D-Bus가 있습니다.분산 객체 시스템은 "공유 없음" 시스템이라고 불리는데, 이는 메시지 전송 구현에 사용될 수 있는 기본 상태 변경이 추상화 전달에 의해 숨겨지기 때문입니다.
![]() | 이 섹션은 컴퓨터 과학 전문가의 주의가 필요합니다.구체적인 문제는 로컬 메시지 전달과 분산 메시지 전달이 혼합된다는 것입니다.예를 들어 로컬 메시지 전달은 참조로 실행할 수 없으며 개체 전체를 포함해야 한다는 것을 의미합니다.이것은 실제로는 분산 시스템에서 부분적으로만 올바른 것입니다.. (2015년 4월) 하는 데 이 될 수 |
분산형(비동기형) 메시지 전달에서는 프로시저를 호출할 때보다 오버헤드가 증가합니다.메시지 전달에서는 인수를 새 메시지에 복사해야 합니다.일부 인수에는 메가바이트의 데이터가 포함될 수 있으며 모든 데이터를 복사하여 수신 개체로 전송해야 합니다.
기존의 프로시저 호출은 메모리 사용량, 전송 시간 및 지역성 측면에서 메시지 전달과 다릅니다.인수는 일반적으로 추가 저장이나 전송 시간을 필요로 하지 않는 범용 레지스터 또는 인수의 주소(몇 비트)를 포함한 파라미터 리스트에 의해 수신자에게 전달됩니다.분산 시스템에서는 별도의 주소 공간을 사용하기 때문에 주소 전달이 불가능합니다.
웹 브라우저와 웹 서버는 메시지 전달을 통해 통신하는 프로세스의 예입니다.URL은 프로세스 내부 정보를 노출하지 않고 리소스를 참조하는 예입니다.
서브루틴 콜 또는 메서드 호출은 호출된 계산이 종료될 때까지 종료되지 않습니다.반면 비동기 메시지 전달은 요청 메시지가 발송된 후 상당한 시간 후에 응답이 도착할 수 있습니다.
일반적으로 메시지 핸들러는 여러 발신인으로부터의 메시지를 처리합니다.즉, 그 상태는 단일 송신자 또는 클라이언트프로세스의 동작과 무관한 이유로 변경될 수 있습니다.이는 메서드가 호출되는 객체의 일반적인 동작과는 대조적입니다.메서드는 메서드 호출 간에 동일한 상태를 유지할 것으로 예상됩니다.즉, 메시지 핸들러는 휘발성 객체와 유사하게 동작합니다.
수학적 모델
메시지 전달의 두드러진 수학적 모델은 Actor 모델과 Pi [6][7]미적분입니다.수학 용어에서 메시지는 개체에 제어를 전달하는 단일 수단입니다.오브젝트가 메시지에 응답하는 경우 해당 메시지에 대한 메서드가 있습니다.
Alan Kay는 OOP에서 메시지 전달이 객체보다 더 중요하며 객체 자체가 종종 과도하게 강조된다고 주장했습니다.라이브 분산 객체 프로그래밍 모델은 이러한 관찰을 기반으로 구축됩니다. 분산 데이터 흐름 개념을 사용하여 높은 수준의 기능 스타일 [8]사양을 사용하여 메시지 패턴 측면에서 복잡한 분산 시스템의 동작을 특징짓습니다.
예
「 」를 참조해 주세요.
- 액티브 메시지
- 분산 컴퓨팅
- 이벤트 루프
- 메시징 패턴
- 컴퓨터 클러스터로 전달되는 메시지
- 메시지 전달 인터페이스
- 메시지 전달을 중심 기능으로 포함하는 프로그래밍 언어:
레퍼런스
- ^ Goldberg, Adele; David Robson (1989). Smalltalk-80 The Language. Addison Wesley. pp. 5–16. ISBN 0-201-13688-0.
- ^ Orfali, Robert (1996). The Essential Client/Server Survival Guide. New York: Wiley Computer Publishing. pp. 1–22. ISBN 0-471-15325-7.
- ^ Orfali, Robert (1996). The Essential Client/Server Survival Guide. New York: Wiley Computer Publishing. pp. 95–133. ISBN 0-471-15325-7.
- ^ Orfali, Robert (1996). The Essential Client/Server Survival Guide. New York: Wiley Computer Publishing. pp. 375–397. ISBN 0-471-15325-7.
- ^ "Process of Hide messages". Message. 2022-04-13. Retrieved 2022-04-12.
- ^ Milner, Robin (Jan 1993). "Elements of interaction: Turing award lecture". Communications of the ACM. 36 (1): 78–89. doi:10.1145/151233.151240.
- ^ Carl Hewitt; Peter Bishop; Richard Steiger (1973). "A Universal Modular Actor Formalism for Artificial Intelligence". IJCAI.
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - ^ Kay, Alan. "prototypes vs classes was: Re: Sun's HotSpot". lists.squeakfoundation.org. Retrieved 2 January 2014.
- ^ "Using Message Passing to Transfer Data Between Threads - The Rust Programming Language". Rust-lang.org.
추가 정보
- Ramachandran, U.; M. Solomon; M. Vernon (1987). "Hardware support for interprocess communication". Proceedings of the 14th annual international symposium on Computer architecture. ACM Press.
- Dally, William. "The Jellybean Machine". Retrieved 7 June 2013.
- McQuillan, John M.; David C. Walden (1975). "Some considerations for a high performance message-based interprocess communication system". Proceedings of the 1975 ACM SIGCOMM/SIGOPS workshop on Interprocess communications. ACM Press.
- Shimizu, Toshiyuki; Takeshi Horie; Hiroaki Ishihata (1992). "Low-latency message communication support for the AP1000". Proceedings of the 19th annual international symposium on Computer architecture. ACM Press.