- 동기/비동기와 블로킹/논블로킹의 구분은 관심사를 어디에 두느냐로 한다.
- 동기&블로킹과 비동기&논블로킹 외에 다른 2가지는 그렇게 많이 쓰이지 않는다.
- 위 매트릭스처럼, 파란색 A함수가 실행되다가 초록색 B함수를 호출하는 시나리오를 생각하자.
블로킹/논블로킹
- 제어권이 누구에게 있는가를 관심사로 한다.
- 제어권은 자신의 함수를 실행할 권리를 말한다.
블로킹의 경우, 처음에 A가 제어권을 갖고 실행하다가 B를 호출하면 B에게 제어권을 넘겨준다. 그러면 A는 제어권이 없으니 그대로 멈춰있는다. 즉, A는 다른 일을 하지 못하고 그저 대기하고 있으며 B는 실행될 수 있다. 그러다가 B가 완료되어 return하며 제어권을 돌려주면 그 때 A는 일할 수 있게 된다.
논블로킹의 경우, A가 B를 호출했을 때 거의 바로 제어권을 돌려받는다. A는 계속 제어권을 갖고 있기 때문에, B와 상관없이 함수를 계속 실행할 수 있다.
동기/비동기
- 함수의 호출과 결과의 반환 시간을 관심사로 한다.
- 여기서 결과란, 온전히 끝까지 실행된 함수의 실행 결과를 말한다.
동기의 경우, 함수의 호출과 결과의 반환 시간이 같다. 즉, A가 B를 호출했을 때 B는 바로 결과를 반환해준다. 그래서 A는 B의 함수가 종료했는지 계속 요청을 보내며 확인해야 한다.
비동기의 경우, 함수의 호출과 결과의 반환 시간이 다르다. A가 B를 호출하고, B는 곧바로 결과를 반환할 필요가 없으며 callback을 통해 결과를 처리한다. 따라서 A는 B가 끝났는지 계속 신경쓰며 확인할 필요가 없다.
개인적인 의견
동기/비동기에 대해 이야기할 때, A와 B 중 누가 결과 완료 시간을 신경쓰느냐? 로 구분하는 사람이 많다. 동기의 경우, A가 B에게 계속 요청을 보내며 완료되었는지 확인하는 것이고, 비동기의 경우 B가 알아서 callback으로 알려준다는 것이다.
저 설명도 이해는 되지만, 그렇다면 대체 왜 하필 이름이 동기 인가? 라는 의문이 들었고 이름과 내용이 잘 연관되지 않았다. 나는 보통, 동기라는 단어를 “또 다른 컴퓨터에 있는 내 캘린더를 클라우드 동기화 할거야” 같이 상대와 나의 정보를 일치시킨다 는 느낌으로 사용해왔기 때문이다.
어쨌든, 그래서 무언가를 일치 시킨다는 관점에서 생각하기 위해 함수의 호출과 결과의 반환 시간을 일치시킨다라고 이해하여 작성해봤다. 잘못 되었다면 알려주시면 감사
참고자료
'CS > 네트워크' 카테고리의 다른 글
TLS 핸드셰이크 (0) | 2022.07.20 |
---|---|
OSI 7계층이란? (0) | 2022.06.11 |
웹소켓(Websocket)이란? (0) | 2022.01.19 |