[C#] async await 기초 #1 : 동기 비동기 개념 이해하기

 

인트로

C# .NET FRAMEWORK 4.5부터 추가된 async awiat 키워드에 대해서 알아보려 한다.

async awiat는 서버(ex 게임 서버 웹서버)를 구축할 때 사용되는 중요한 개념 중 하나다.

블로그에 정리하고 싶었는데 미루다 미루다 이제 포스팅하게 된다.

 

async awiat를 바로 이해하긴 어렵고 동기, 비동기에 대해서 알아볼 필요가 있다.

나아가 동기식 싱글 쓰레딩, 동기식 멀티 쓰레딩, 비동기식 싱글 쓰레딩, 비동기식 멀티 쓰레딩에 대해서 정리하려 한다.

 

+ 글이 생각보다 길어져서 async awiat 예제 코드는 다음 포스팅에 있습니다.

  예제 코드를 보고 싶은 분들은 링크 참조하세요.

2021.07.29 - [분류 전체보기] - [C#] async await 예제 코드 #2 (+ 동기 비동기의 개념)

 

[C#] async await 예제 코드 #2 (+ 동기 비동기의 개념)

async await 두 번째 편이자 마지막 편! 빵! 끗! 인트로 async await 예제 코드 포스팅입니다. async awiat의 선행 지식인 동기 비동기의 개념이 아직 부족하시다면 해당 포스팅을 참고하시기 바랍니다. asy

kangworld.tistory.com

 

동기식 비동기식

지금부터 나는 개발자이며 내가 개발한 게임을 플레이하는 유저다.

열심히 코딩해서 친구 목록을 출력하는 함수를 개발했다. 그리고 조금 과장해서 게임에서 친구가 2만 명 정도 된다.

게임에 접속해서 친구 목록을 출력하는 버튼을 클릭하고 NPC와 대화를 하려 한다.

 

여기서 예상되는 결과는 두 가지로 나뉜다.

 

첫 번째, 2만 명의 친구를 출력하는 동안 게임이 멈추고 출력이 끝나면 NPC와 대화가 진행된다.

 

두 번째, 화면이 멈추지 않고 NPC와 대화하는 도중에 친구 목록을 출력한다.

 

전자가 동기 방식이고 후자가 비동기 방식이다. 이 두 차이를 이해하는 것이 동기 비동기를 이해하는 첫걸음이다.

 

 

설명이 부족하다면 현실에 비유한 예를 들어보자

난 1인 식당을 운영하고 있다. 한 손님이 베이컨과 토스트를 주문했다.

 

첫 번째 : 베이컨을 다 굽는다. 그 다음 토스트를 다 굽는다. 접시에 담는다. 손님에게 서빙한다.

 

두 번째 : 팬에 베이컨을 올리고 타이머를 누른다. 팬에 토스트를 올리고 타이머를 누른다. 틈틈이 청소한다. 베이컨 타이머가 울려 베이컨을 접시에 담는다. 토스트 타이머가 울려 토스트를 접시에 담는다. 손님에게 서빙한다.

 

이제 조금 감이 잡혔을 것 같다. 전자는 동기식,  후자가 비동기식이다.

 

조금 더 엄밀히 말하면 전자는 동기식 싱글 쓰레딩(Synchronous single threading) 후자는 비동기식 싱글 쓰레딩(Asynchronous single threading)이다.

 

지금 후술 할 내용이 이해가 안 된다면 다음 목차로 넘어가도 된다.

서술하기 앞서 비동기와 멀티 쓰레딩이 동일한 개념으로 알고 있는 경우가 있는데 전혀 다르다.

 

비동기식 멀티 쓰레딩을 식당에 비유하면

나는 사장이고 베이컨을 굽는 직원이 있고 토스트를 굽는 직원이 있고 서빙을 담당하는 직원이 있다고 보면 된다.

베이컨 주문이 10개 들어오면 팬에 베이컨 올리고 타이머를 누르는 작업을 10번 수행하고 10개의 타이머가 순차적으로 울리면 차례로 뒤집는 작업을 하게 된다. 토스를 굽는 직원도 동일한 메커니즘이다.

 

반면 동기식 멀티 쓰레딩을 식당에 비유하면

나는 사장이고 베이컨을 굽는 직원이 있고 토스트를 굽는 직원이 있고 서빙을 담당하는 직원이 있는 것은 비동기식 멀티 쓰레딩과 동일하다.

하지만 베이컨 주문이 10개 들어오면 베이컨을 한 개 올리고 굽고 요리가 끝나면 새로 베이컨을 하나 굽고 이러한 과정을 10번 반복한다. 우리가 알고 있는 보편적인 멀티 쓰레딩 개념이 바로 동기식 멀티 쓰레딩이 아닐까 한다. 

 

쓰레딩은 프로그램에서 작업(Task)을 처리하는 주체 즉 쓰레드에 관한 개념이고

비동기와 동기는 작업에 대한 요청과 응답을 처리하는 방식에 관한 개념이다.

 

마치며

+ 글이 생각보다 길어져서 async awiat 예제 코드는 다음 포스팅에 있습니다.

  예제 코드를 보고 싶은 분들은 링크 참조하세요.

2021.07.29 - [분류 전체보기] - [C#] async await 예제 코드 #2 (+ 동기 비동기의 개념)

 

[C#] async await 예제 코드 #2 (+ 동기 비동기의 개념)

async await 두 번째 편이자 마지막 편! 빵! 끗! 인트로 async await 예제 코드 포스팅입니다. async awiat의 선행 지식인 동기 비동기의 개념이 아직 부족하시다면 해당 포스팅을 참고하시기 바랍니다. asy

kangworld.tistory.com