비동기 에이전트
비동기 에이전트(또는 단지 에이전트)는 더 큰 컴퓨팅 작업을 해결하기 위해 다른 에이전트와 비동기적으로 작동하는 애플리케이션 구성 요소입니다. 에이전트를 설정된 수명 주기가 있는 작업으로 간주합니다. 예를 들어 한 에이전트는 입력/출력 디바이스(예: 키보드, 디스크의 파일 또는 네트워크 연결)에서 데이터를 읽을 수 있고, 다른 에이전트는 사용 가능해지면 해당 데이터에 대한 작업을 수행할 수 있습니다. 첫 번째 에이전트는 메시지 전달을 사용하여 두 번째 에이전트에 더 많은 데이터를 사용할 수 있음을 알릴 수 있습니다. 동시성 런타임 작업 스케줄러는 에이전트가 덜 효율적인 선점 없이도 협조적으로 차단하고 양보할 수 있도록 하는 효율적인 메커니즘을 제공합니다.
에이전트 라이브러리는 비동기 에이전트를 나타내는 동시성::agent 클래스를 정의합니다. agent
는 가상 메서드 동시성::agent::run을 선언하는 추상 클래스입니다. 메서드는 run
에이전트에서 수행하는 작업을 실행합니다. run
추상이므로 파생되는 모든 클래스에서 이 메서드를 agent
구현해야 합니다.
에이전트 수명 주기
에이전트에는 설정된 수명 주기가 있습니다. 동시성::agent_status 열거형은 에이전트의 다양한 상태를 정의합니다. 다음 그림은 에이전트가 한 상태에서 다른 상태로 진행되는 방식을 보여 주는 상태 다이어그램입니다. 이 그림에서 단선은 애플리케이션에서 호출하는 메서드를 나타냅니다. 점선은 런타임에서 호출되는 메서드를 나타냅니다.
다음 표에서는 열거형의 agent_status
각 상태를 설명합니다.
에이전트 상태 | 설명 |
---|---|
agent_created |
에이전트가 실행 예약되지 않았습니다. |
agent_runnable |
런타임이 에이전트의 실행을 예약합니다. |
agent_started |
에이전트가 시작되고 실행 중입니다. |
agent_done |
에이전트가 완료되었습니다. |
agent_canceled |
에이전트가 상태가 되기 전에 취소되었습니다 started . |
agent_created
는 에이전트의 초기 상태이며 agent_started
활성 agent_runnable
상태이며 agent_done
agent_canceled
터미널 상태입니다.
동시성::agent::status 메서드를 사용하여 개체의 agent
현재 상태를 검색합니다. 메서드는 status
동시성 안전하지만 메서드가 반환될 때까지 status
에이전트의 상태가 변경될 수 있습니다. 예를 들어 메서드를 호출할 때 에이전트가 agent_started
상태에 있을 수 있지만 메서드가 반환된 직후 status
상태로 이동됩니다agent_done
.status
메서드 및 기능
다음 표에서는 클래스에 속하는 몇 가지 중요한 메서드를 보여 줍니다 agent
. 모든 agent
클래스 메서드에 대한 자세한 내용은 에이전트 클래스를 참조 하세요.
메서드 | 설명 |
---|---|
start | 개체의 agent 실행을 예약하고 상태로 설정합니다 agent_runnable . |
run | 개체에서 수행할 작업을 실행 agent 합니다. |
수행 | 에이전트 agent_done 를 상태로 이동합니다. |
cancel | 에이전트가 시작되지 않은 경우 이 메서드는 에이전트 실행을 취소하고 상태로 설정합니다 agent_canceled . |
status | 개체의 현재 상태를 검색합니다 agent . |
wait | 개체가 agent 또는 agent_canceled 상태가 될 agent_done 때까지 기다립니다. |
wait_for_all | 제공된 모든 개체가 agent 또는 agent_canceled 상태가 될 agent_done 때까지 기다립니다. |
wait_for_one | 제공된 agent 개체 중 하나 이상이 또는 agent_canceled 상태를 입력 agent_done 할 때까지 기다립니다. |
에이전트 개체를 만든 후 동시성::agent::start 메서드를 호출하여 실행을 예약합니다. 런타임은 에이전트를 run
예약한 후 메서드를 호출하고 상태를 설정합니다 agent_runnable
.
런타임은 비동기 에이전트에 의해 throw되는 예외를 관리하지 않습니다. 예외 처리 및 에이전트에 대한 자세한 내용은 예외 처리를 참조 하세요.
예시
기본 에이전트 기반 애플리케이션을 만드는 방법을 보여 주는 예제는 연습: 에이전트 기반 애플리케이션 만들기를 참조하세요.