20220516 Asynchronous Programming


title: "Asynchronous Programming" date: "2022-05-16"

modified: "2022-05-16"

뭔가 의미없지만 의미있는 정리

면접때 뭘 물어보면 좋을까

비동기 프로그래밍(Asynchronous Programming)

  1. 레벨1기초 : 1.1. 묻고자 하는바 : 비동기 프로그래밍이 무엇인지 아는가? 1.2. 정답 - 주요 키워드 중심으로 :
  • 순차적으로 작업을 수행하는 것이 아니라 큰 작업을 개별 스레드(작업)으로 수행하여 복수의 작업을 동시에 수행
  • 동기 프로그래밍(Synchronous Programming)의 경우 한 작업 후 다음 작업이 수행되어야 하나, 비동기 프로그래밍의 경우 동시에 여러 작업을 수행할 수 있어 실행 속도 개선
  • 예를 들어, 동기 프로그래밍의 경우 GUI환경에서 큰작업(파일로드 등)을 수행할 경우 작업이 종료될때까지 화면이 멈추지만, 비동기 프로그래밍으로 코딩을 하면 화면 쓰레드와 파일 로드 쓰레드가 별도 수행되며, 파일로드가 종료될 때 해당 결과를 화면단에 갱신하면 되므로 사용성 개선
  • 멀티코어가 탑제되는 현대의 운영 환경에서 복수 코어를 활용할 수 있는 방법
  1. 레벨2 2.1. 묻고자하는 바 - 비동기 프로그램을 과제/프로젝트/결과물에 적용하여 개발한 경험이 있는가? 2.1.1. 상세 시나리오 : 모바일 장치로 파일 카피 모바일 디바이스로 파일을 카피하려고 하는데 동기 프로그래밍으로 작업되어 있어, 파일 이동 중 화면이 멈추는 현상이 있다. 파일 이동 중에도 화면 갱신 및 이벤트를 정상적으로 수신하려면 어떻게 하면 좋을까? 자신이 알고 있는 프레임워크/라이브러리/구조를 이용하여 전체 구조를 잡고 코딩하시오. 2.2. 정답 - 주요 키워드 중심으로 :
  • 태스크에 대한 생성, 실행, 반환, 에러에 대한 입/출력 구조와 문법을 잘 이해하고 있는가?
  • 태스크 구조체
System.Threading.Tasks.Task
  • 제어 흐름
  • 태스크 종료 후 다음 작업 수행
//테스트 수행 결과를 기다려서
Toast toast = await toastTask;
//원하는 동작 수행
  • 콜백을 넣어서 메인 흐름은 진행하고, 작업 수행 후 콜백 수행
//테스트 수행 결과를 기다려서
foreach(Task recommendation in recommendations)
{
var ignored = recommendation.ContinueWith( /*콜백함수를 넣어서 태스크 종료 후 연속 수행*/ );
}
  • 기타

  • 프레임워크나 런타임에 관계없이 경험을 질문

  • 면접자에 따라 사용해온 환경이 다를 것 같은데 답을 어떻게 적으면 좋을지...

  1. 레벨3 단순한 로직말고 예외 처리를 수행한 경험이 있는가?
  • ex) http get으로 데이터를 수신하려고 하는데, 실패 로직은 어떻게 처리?

  • 서버와 통신이 실패한 경우(ex. 4xx 수신)

  • 서버에서 에러를 던진 경우?

  • 실패시 재시도? 화면에 에러처리?

  • 그 경우 빈틈이 없는가? 사용자가 원하는 목표를 달성할 수 있는가?

  • 프로그램이 죽지는 않는가?

  • ex) 쓰레드를 통하여 파일 로드를 한 후 해당 파일을 화면에 갱신하려고 하는데 파일 읽기에 실패한 경우 어떻게 처리

  1. 참고