concurrency(동시, 동시처리)는 동시간대에 다수의 클라이언트에 대한 응답을 처리하기 위해 다수의 쓰레드를 사용하는 경우를 의미한다. 쓰레드 또는 프로세서 관점에서 반복서버/Reactor 서버와 동시 서버로 나눌 수 있습니다. 핸들의 유형에 따라서 동기적 핸들, 비동기적 핸들로 나눌 수 있습니다. Proactor 패턴은 비동기적 핸들을 사용하는 패턴입니다. Reactor 패턴은 동기적 핸들을 사용하고, 하나의 쓰레드에서 다수의 클라언트를 처리하도록 설계했습니다.
ACE Task Framework는 쓰레드간 통신을 단순화합니다. 쓰레드를 특정 객체 내부에서 운영하고, 객체간의 통신을 쓰레드간 통신으로 맵핑합니다. 특정 객체가 내부에 쓰레드를 포함한 객체를 Active Object라고 부릅니다. ACE Task Framework이 쓰레드 제어를 객체 제어로 단순화시킵니다.
ACE Task Framework는 Active Object 패턴 또는 Half-Sync/Half-Async 패턴을 쉽게 구현하도록 합니다.
Active Object 패턴은 Invoke와 Execute를 분리(별도의 쓰레드에서 작동함)합니다. 요청에 대한 실행이, 상당히 많은 시간적인 지연이 발생한다면, Invoke과 Execute를 분리함으로 성능적인 잇점을 가져가야 할 필요성이 있습니다. Active Object 패턴은 요청 작업, 실행 작업과 함께 실행 결과 반환 작업이 이루어져야 하는데, 이때 Future 토근이 사용합니다.
Half-Sync/Half-Async 패턴은 클라언트 데이터를 기다리는 쓰레드와 다수의 처리 쓰레드로 분리하고, 클라언트 데이터를 메세지 큐에 넣어주고, 실제 처리 쓰레드를 깨워주는 구조입니다.