[기술 면접] 9. Sync, Async, Blocking, Non-blocking을 설명해보세요.

Sync, Async, Blocking, Non-blocking을 설명해보세요.

저번 시간에 이어, 이번엔 Sync, Async, Blocking, Non-blocking에 대한 면접 질문들을 알아보겠습니다. 출제 빈도가 조금 있는 편이라고 생각합니다. 많이 헷갈리는 부분이지만, 꼼꼼히 학습하여 대비하시길 바랍니다.

Sync, Async, Blocking, Non-blocking을 설명해보세요.



Q: Sync와 Async를 설명해보세요

  • Sync: A 함수가 B 함수를 호출할 때, B 함수의 작업이 완료될 때까지 A 함수가 대기하고, B 함수의 결과를 A 함수가 처리합니다.
  • Async: A 함수가 B 함수를 호출할 때, B 함수의 작업을 요청한 후, 대기하지 않고 다음 코드를 실행합니다. B 함수의 작업이 완료되면 콜백이 호출되거나 이벤트를 발생시켜 결과를 처리합니다.



Q: Blocking과 Non-blocking은 무엇인가요?

  • Blocking: A 함수가 B 함수를 호출할 때, B 함수의 작업이 완료되기 전까지 A 함수에게 제어권을 돌려주지 않고 대기합니다. A 함수는 B 함수가 작업을 마칠 때까지 멈추어 있습니다.
  • Non-blocking: A 함수가 B 함수를 호출할 때, B 함수가 바로 제어권을 A 함수에게 돌려주면서, A 함수가 다른 작업을 수행할 수 있도록 합니다. B 함수의 작업이 완료되면 알림이나 콜백을 통해 결과를 전달받을 수 있습니다



Q: 그렇다면 동기(Sync)와 비동기(Async)를 각각 어떤 상황에서 사용해야 하나요?

동기(Sync)는 서비스의 순서가 중요하거나, 이전 작업의 결과물이 영향을 끼칠 때 사용합니다.

  • 파일을 읽은 후 데이터를 처리하는 프로세스를 예로 들 수 있습니다.


비동기(Async)는 작업끼리의 순서가 중요하지 않고 시간이 오래 걸리거나 외부 리소스에 접근해야 하는 경우에 사용합니다.

  • 네트워크 호출이나 대규모 파일 다운로드 등을 예로들 수 있습니다.



Q: 그럼 Blocking과 Non-blocking은 어떤 상황에서 쓰이나요?

Blocking은 사용자의 입력을 기다리거나 쿼리의 결과를 기다리는 등, 이전에 호출한 작업이 완료될 때까지 대기하는 상황에서 사용됩니다.

Non-blocking은 여러 Web Page를 동시에 로드하면서 하나의 Page 로딩이 지연 되어도, 다른 Page의 로딩이 계속되는 것으로 설명할 수 있습니다.



Q: Blocking과 Non-blocking 사용 시 주의할 점이 있을까요?

블로킹은 오래 걸리는 작업이 있으면, Application 전체가 멈출 수 있으므로, 긴 작업은 별도의 스레드나 프로세스에서 처리하는 것이 권장됩니다.

논블로킹Callback hell을 방지하기 위해 프로미스(Promise)나 async/await을 사용하는 것이 좋습니다.

  • Callback hell: 무한 콜백



Q: Sync와 Async, 그리고 Block과 Non-Block은 비슷하게 들리는데, 차이점을 더 상세하게 설명해주세요.

Sync(동기)와 Async(비동기)는 작업의 완료 시기와 결과물에 초점을 둔다면, Block(블로킹)과 Non-Block(논블로킹)은 제어권과 대기 여부에 초점을 맞춥니다.



마치며

이번 시간에는 Sync와 Async, 그리고 Blocking과 Non-blocking에 대해 알아보았습니다. 굉장히 어려울 수 있는 부분이라고 생각합니다. 운영체제 카테고리도 지금까지 다양한 질문을 다루어 왔습니다. 한 번에 익힐 수 있는 양이 아니기 때문에 반복적인 복습이 필요합니다.

꼼꼼하게 숙지하셔서 좋은 결과 있으시길 바랍니다.

image 13

Leave a Comment