다음을 통해 공유


비동기 에이전트

비동기 에이전트 또는 에이전트는 규모가 큰 컴퓨팅 작업을 해결하기 위해 다른 에이전트와 함께 비동기적으로 동작하는 응용 프로그램 구성 요소입니다.에이전트를 수명 주기가 설정된 작업으로 간주할 수 있습니다.예를 들어 한 에이전트는 키보드, 디스크의 파일 또는 네트워크 연결과 같은 입/출력 장치에서 데이터를 읽고 다른 에이전트는 해당 데이터를 사용할 수 있게 되면 데이터로 작업을 수행합니다.첫 번째 에이전트는 메시지 전달을 사용하여 두 번째 에이전트에 추가 데이터를 사용할 수 있음을 알립니다.동시성 런타임 작업 스케줄러는 효율성이 낮은 선점이 없어도 에이전트가 협조적으로 차단 및 양보할 수 있도록 하는 효율적인 메커니즘을 제공합니다.

에이전트 라이브러리 정의 concurrency::agent 비동기 에이전트를 나타내는 클래스입니다.agent가상 메서드를 선언 하는 추상 클래스입니다 concurrency::agent::run.run 메서드는 에이전트에서 수행하는 작업을 실행합니다.run은 추상 메서드이므로 agent에서 파생되는 모든 클래스에 이 메서드를 구현해야 합니다.

에이전트 수명 주기

에이전트에는 수명 주기가 설정되어 있습니다.Concurrency::agent_status 열거형은 다양 한 에이전트의 상태를 정의 합니다.다음 그림은 에이전트가 상태별로 진행되는 방식을 보여 주는 상태 다이어그램입니다.이 그림에서 실선은 응용 프로그램에서 호출하는 메서드를 나타내고 점선은 런타임에서 호출되는 메서드를 나타냅니다.

에이전트 상태 다이어그램

다음 표에서는 agent_status 열거형의 각 상태에 대해 설명합니다.

에이전트 상태

설명

agent_created

에이전트가 실행되도록 예약되지 않았습니다.

agent_runnable

런타임에서 에이전트를 실행하도록 예약하고 있습니다.

agent_started

에이전트가 시작되어 실행되고 있습니다.

agent_done

에이전트가 끝났습니다.

agent_canceled

에이전트가 started 상태를 시작하기 전에 취소되었습니다.

agent_created는 에이전트의 초기 상태이고, agent_runnableagent_started는 활성 상태이며, agent_doneagent_canceled는 종료 상태입니다.

사용은 concurrency::agent::status 의 현재 상태를 검색 하는 메서드는 agent 개체입니다.status 메서드는 동시성이 보장되지만 status 메서드가 반환될 때 에이전트의 상태를 변경할 수 있습니다.예를 들어 status 메서드를 호출할 때는 에이전트가 agent_started 상태일 수 있지만 status 메서드가 반환된 직후에는 agent_done 상태로 이동했습니다.

메서드 및 기능

다음 표에서는 agent 클래스에 속하는 중요한 메서드 중 일부를 보여 줍니다.모든 agent 클래스 메서드에 대한 자세한 내용은 에이전트 클래스를 참조하십시오.

메서드

설명

start

agent 개체의 실행을 예약하고 agent_runnable 상태로 설정합니다.

run

agent 개체에서 수행할 작업을 실행합니다.

done

에이전트를 agent_done 상태로 이동합니다.

cancel

에이전트가 시작되지 않은 경우 이 메서드는 에이전트의 실행을 취소하고 agent_canceled 상태로 설정합니다.

status

agent 개체의 현재 상태를 검색합니다.

wait

agent 개체가 agent_done 또는 agent_canceled 상태가 될 때까지 기다립니다.

wait_for_all

제공된 모든 agent 개체가 agent_done 또는 agent_canceled 상태가 될 때까지 기다립니다.

wait_for_one

제공된 모든 agent 개체 중 적어도 하나가 agent_done 또는 agent_canceled 상태가 될 때까지 기다립니다.

에이전트 개체를 만든 후 호출의 concurrency::agent::start 메서드를 실행 하도록 예약 합니다.런타임에서는 에이전트가 예약된 후 run 메서드를 호출하고 agent_runnable 상태로 설정합니다.

런타임에서는 비동기 에이전트에서 throw되는 예외를 관리하지 않습니다.예외 처리 및 에이전트에 대한 자세한 내용은 동시성 런타임에서 예외 처리를 참조하십시오.

예제

에이전트를 기반으로 한 기본 응용 프로그램을 만드는 방법을 보여 주는 예제를 보려면 연습: 에이전트 기반 응용 프로그램 만들기를 참조하십시오.

참고 항목

개념

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