분명히 여러번 공부를 했고, 아티클을 읽었음에도 자꾸 까먹는 동기/비동기와 블록킹, 논블록킹의 차이를 한번 제대로 끝내고자 미래의 저를 위해 글을 정리해봤습니다.
1. 동기(Synchronous)와 비동기(Asynchronous):
- 동기(Synchronous): 요청을 보낸 후, 그 요청의 결과가 나올 때까지 기다린 다음에야 다음 동작을 수행합니다. 예를 들면, 커피 주문하고 바로 커피 받을 때까지 기다리는 것입니다.
- 비동기(Asynchronous): 요청을 보내고 결과를 기다리지 않고 바로 다음 동작을 수행하는 것입니다. 결과는 나중에 알려줍니다. 예를 들면, 커피 주문하고 번호표 받고 다른 일하다가 커피 나오면 받는 것입니다.
2. 블록킹(Block)과 논블록킹(Non-Block):
블록킹(Block): 어떤 작업을 요청할 때 그 작업이 끝날 때까지 계속 기다립니다. 다른 일을 할 수 없어서 마치 막혀 있는 것처럼 느껴집니다.
논블록킹(Non-Block): 작업을 요청해도 그 결과를 기다리지 않고 다른 일을 할 수 있습니다. 작업이 끝나면 나중에 결과를 알려줍니다.
간단하게 말하면, 동기/비동기는 '작업 완료를 언제 확인하느냐'에 초점을 맞추고, 블록킹/논블록킹은 '요청 후 대기하는 동안 다른 작업을 할 수 있는지'에 대한 것입니다. 이 둘은 비슷해 보이지만, 실제로는 조금 다른 개념입니다. 동기/비동기는 결과의 완성과 관련된 것이고, 블록킹/논블록킹은 프로세스의 상태(막히거나 막히지 않거나)와 관련된 것입니다.
웹 개발에서 비동기 방식을 많이 사용하는데, 이유는 서버에 요청을 보낸 후 응답을 기다리는 동안에도 사용자는 페이지에서 다른 작업을 계속 할 수 있기 때문입니다. 예를 들어, 웹페이지에서 데이터를 불러오는 동안 사용자가 다른 버튼을 클릭하거나 스크롤을 할 수 있습니다. 이게 바로 비동기 방식의 매력이라고 할 수 있습니다.
간단 정리
동기/비동기는 작업 단위에 대한 개념, 블록킹/논블록킹은 프로세스 단위에 대한 개념입니다.
동기/비동기는 커피 배달을 기다리는지에 대한 것, 블록킹/논블록킹은 커피 배달하는 사람이 기다리는지에 대한 것입니다.
이렇게 정리해봤는데, 다음에는 누가 물어보면 자신있게 답할 수 있다면 좋겠네요.