다음을 통해 공유


비동기 에이전트

비동기 에이전트(또는 단지 에이전트)는 더 큰 컴퓨팅 작업을 해결하기 위해 다른 에이전트와 비동기적으로 작동하는 애플리케이션 구성 요소입니다. 에이전트를 설정된 수명 주기가 있는 작업으로 간주합니다. 예를 들어 한 에이전트는 입력/출력 디바이스(예: 키보드, 디스크의 파일 또는 네트워크 연결)에서 데이터를 읽을 수 있고, 다른 에이전트는 사용 가능해지면 해당 데이터에 대한 작업을 수행할 수 있습니다. 첫 번째 에이전트는 메시지 전달을 사용하여 두 번째 에이전트에 더 많은 데이터를 사용할 수 있음을 알릴 수 있습니다. 동시성 런타임 작업 스케줄러는 에이전트가 덜 효율적인 선점 없이도 협조적으로 차단하고 양보할 수 있도록 하는 효율적인 메커니즘을 제공합니다.

에이전트 라이브러리는 비동기 에이전트를 나타내는 동시성::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되는 예외를 관리하지 않습니다. 예외 처리 및 에이전트에 대한 자세한 내용은 예외 처리를 참조 하세요.

예시

기본 에이전트 기반 애플리케이션을 만드는 방법을 보여 주는 예제는 연습: 에이전트 기반 애플리케이션 만들기를 참조하세요.

참고 항목

비동기 에이전트 라이브러리