Sync / Async, blocking / non-blocking

빙티·2024년 11월 24일
1

CS

목록 보기
1/1

헷갈렸던 개념을 까먹지 않도록 정리해보자!

🏃🏻‍♀️ Sync(동기) / 🔫 Async(비동기)

동기와 비동기를 나누는 포인트 : 루틴이 서브루틴의 작업 종료 여부를 신경 쓰는가?

  • Sync(동기)
    루틴이 서브루틴을 호출하고, return 되었는지 신경 쓴다.
    서브루틴의 시작과 종료가 루틴의 작업 흐름에 직접적인 영향을 준다.

  • Async(비동기)
    루틴이 서브루틴에게 작업을 위임(callback 전달)하고 종료 여부를 신경 쓰지 않는다.
    서브루틴은 루틴에게 callback 작업을 받아 수행한다.


이어달리기를 상상해 보자.

동기(Sync)란 한 선수가 바통을 전달하기 전까지 다음 선수가 대기하는 것과 같다. 이전 작업(달리기)이 완료되어야만 다음 작업이 시작되며, 작업은 순차적으로 진행된다.

반면, 심판과 선수들의 관계는 비동기(Async)이다. 심판은 선수들에게 '달리기를 시작해라'라는 출발 신호를 전달하지만, 이후 각 선수가 출발했는지, 넘어졌는지에는 관여하지 않는다. 필요할 경우 선수들이 자신의 상태를 callback으로 심판에게 알릴 수 있다.




🎛️ blocking / non-blocking

blocking과 non-blocking을 나누는 포인트 : 루틴과 서브루틴 중 제어권이 누구에게 있는가?

  • blocking
    제어권이 서브루틴에게 있음.
    루틴은 서브루틴의 작업이 끝날 때까지 기다리며, 다른 작업을 하지 못함.

  • non-blocking
    제어권이 루틴에게 있음.
    서브루틴이 작업 요청을 받은 후 즉시 제어권을 반환하므로 루틴은 다른 작업을 수행할 수 있음.




그림으로 살펴보기

일반적인 동기, blocking의 경우 루틴과 서브루틴의 실행 흐름은 아래와 같다.

나머지 이미지는 추후 업로드 예정...
갑자기 만들기 귀찮다

0개의 댓글