Digital Recipe

동기와 비동기 명령 처리, 그리고 콜백 함수 본문

컴퓨터 공학/컴퓨터 공학의 이해

동기와 비동기 명령 처리, 그리고 콜백 함수

노리터 2016. 12. 9. 21:53

개요

동기(Synchronous)와 비동기(Asynchronous) 명령 처리에 대해서 이야기를 해보겠다. 이 개념은 프로그래밍 언어 개발 시 동기 형태의 함수와 비동기 형태의 함수로도 사용될 수 있고 통신 개발 시 메시지의 송신과 수신에 대해서도 사용될 수 있다. 그리고 이를 위해 콜백(CallBack) 함수라는 개념도 함께 사용된다.


동기(Synchronous)와 비동기(ASynchronous) 처리

프로그래밍에서 가장 일반적인 수행 절차는 실행 중인 함수(이하 '마스터'라고 가정)가 필요한 함수를 호출(Call)하는 것이다. 그리고 호출된 함수는 자신이 할 일을 마치고 마스터에게 처리 결과를 응답을 하고 자신의 일을 마친다. 이렇게 기본적인 프로그래밍의 수행 절차는 순차적으로 처리된다. 이런 절차를 동기식 처리라고 한다. 여기서 관심있게 볼 수 있는 것은 무엇일까? 마스터는 새로운 함수를 호출하고 다른 일을 하지 않고 기다리다가 호출한 함수로부터 응답이 오면 이제야 다음 일을 수행하기 시작한다.

그럼 비동기식 처리는 무엇일까? 위 동기식 처리와 반대가 된다. 즉 마스터는 필요한 함수를 호출하고 그에 대한 처리 결과가 응답으로 오기 전까지 기다리고 있는 것이 아니라 다른 일을 하다가 호출한 함수가 처리 결과를 알려주면 그에 대한 처리를 수행하는 것을 말한다. 그리고 이를 위해 콜백이라 불리는 함수가 사용된다. 마스터는 비동기식 명령을 내릴 때 "네가 할 일이 끝나면 이걸 통해서 나에게 처리 결과를 알려줘"라고 콜백이라고 부르는 함수를 함께 알려준다. 호출된 함수는 처리가 끝나면 마스터 알려준 함수를 호출하여 처리 결과를 전달하게 되고 이런 함수 호출의 흐름은 사용자가 호출한 것이 아니라 일을 마친 시스템이 호출하는 형태이기 때문에 콜백이라고 불린다.

비동기식 처리에 대한 부가적인 설명을 하자면, 마스터가 비동기식 처리를 요청했을 때 호출받은 함수는 바로 응답을 수행한다. 이 응답은 처리 결과에 대한 응답이 아니라 마스터에게 요청을 잘 받았다.라고 확인하는 동작일 뿐이다. 그리고 호출받은 함수는 이미 응답을 했기 때문에 처리결과를 함수 호출이라는 형태로 전달하는 것이다.


비동기식 처리의 활용

비동기식은 왜 사용하게 되는 걸까? 그 이유는 시스템간의 처리속도의 차이 혹은 특정 이벤트가 언제 발생했을 때 알람을 받기 위한 상황 등으로 이야기할 수 있겠다. 예를 들어보면 컴퓨터에서 2차 저장장치의 처리 속도는 CPU와 메모리보다 느리다. 때문에 대용량 파일을 2차 저장장치에 쓰기를 요청하고 CPU가 처리가 완료될 때까지 기다리고 있다면 엄청난 시간 낭비가 발생할 것이다. 그리고 컴퓨터는 먹통이 된 것 처럼 느껴질 것이다. 또 다른 예시로 컴퓨터의 온도가 일정 온도 이상으로 올라갈 때 시스템으로부터 경고를 받아 처리해야할 함수가 있다면 비동기식으로 처리해 볼 수 있겠다. 동기식 흐름을 통해 반복적으로 온도를 확인하고 처리할 수 있겠지만 비동기식 처리를 통해 시스템이 알아서 확인하고 응답해 준다면 좀 더 효율적인 시스템을 개발할 수 있을 것이다.



Reference

[01] http://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/ (Async/Sync/Block/non-block 개념에서 접근한 내용 기술)


Written By Hoseok Seo

2016. 12. 09


Comments