일반적인 오해와는 달리 async/await는 새 스레드를 생성하지 않습니다. 대신 협력적 멀티태스킹을 사용하여 애플리케이션 응답성을 크게 향상시킵니다.
비동기/대기 작동 방식
컴파일러는 async/await를 사용하는 메서드를 교묘하게 두 섹션으로 나눕니다.
await
키워드 앞의 코드(비동기 작업 시작 포함)await
키워드 다음에 오는 코드실행 순서:
await
문에 도달할 때까지 메서드가 실행됩니다. 비동기 작업(예: GetSomethingAsync()
)이 호출됩니다. 이 작업은 보류 중인 결과(예: Task
)를 반환합니다.SynchronizationContext
에 비동기 작업 완료 신호를 알립니다. 제어는 메시지 루프로 돌아가서 다른 작업을 처리할 수 있습니다.SynchronizationContext
에서 알림을 받습니다.SynchronizationContext
는 메시지 루프 큐에 메시지를 추가하여 파트 2의 실행을 시작합니다. 메시지 루프는 이를 처리하여 await
이후 지점에서 메서드를 다시 시작합니다. 응답성 향상
비동기 작업이 보류되는 동안 메시지 루프는 사용자 입력 및 UI 업데이트를 자유롭게 처리하여 애플리케이션의 응답성을 유지합니다. 완료되면 2부가 애플리케이션 상태를 업데이트합니다.
중요 고려 사항:
SynchronizationContext
을 통해 협력적 멀티태스킹을 활용합니다.위 내용은 Async-Await은 추가 스레드를 사용하지 않고 앱 응답 성을 어떻게 향상 시킵니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!