대부분 프밍 언어는 메서드가 호출되면 동기적으로 실행됨. 바꿔 말하면 코드가 순차적으로 실행되고 전체 메서드의 실행이 끝나기 전까지는 제어권을 반환 안함
그런데 메서드 실행 기간이 길어지면 문제 될 수 있음.
이런 상황 방지하려면 워커 스레드 생성하고, 이 스레드에서 메서드 호출해야됨. 그러나 대부분 스레드를 따로 만드는데서 오는 번잡스러움과 오버헤드를 감수할 가치 엄슴
-
극단적으로 비효율적인 경우 상상
-
안내 데스크 도착해 진료접수하려함 이과정이 동기였다면 우리는ㄴ 기다려야함
- 비동기 도입
- 나한테 펜 주고 작성하고 다시 오라함
- 간호사는 다른 환자 맞이함
- 난 다 끝나고 돌아감
-
동시성을 지원하도록 순차적 프밍 모델을 확장할 수도 있음
- 동기적인 호출을 비동기적인 의미로 오버로딩하면됨
- 이 호출은 동기화 지점 안만들며 수행 결과는 런타임의 스케줄러가 나중에 핸들러에게 비동기적으로 전달함
-
이러한 비동기적 의미의 동기적 호출을
- 비동기 호출 asynchronous call
- 비동기 프로시저 호출 asynchrounous procedure call, APC
-
APC는 실행 시간 길어질 가능성 있는 동기적 메서드를 비동기적 버전으로 만듬
- 이 메서드는 호출 즉시 제어권 반환
-
또 해당 객체에 다른 메서드가 추가됨
- 이건 비동기적 버전으 ㅣ메서드의 작업이 수행 완료 되었는지 확인하거나, 완료후 수행결과를 전달받는데 쓰임
-
프밍 세계에는 비동기적으로 만들어주는 여러 소프트웨어 구조나 연산있음
- 가장 널리 쓰이는게 12.3협동형 멀티태스킹