Service/Coding

[API Stack]Blocking vs Non-Blocking, Sync vs Async

포항돼지 2025. 4. 2. 14:36

Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때 까지 기다렸다가 자신의 작업을 시작 하는 것


Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것

 

 

 

Blocking

 

Non-Blocking

 

즉, Blocking과 Non-Blocking은 다른 주체가 작업을 할 때 자신이 제어권이 있는지 없는지로 나뉜다는 것

 
 

Synchronous : 동기라는 뜻을 가진다

작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미

 

Asynchronous : 비동기 라는 뜻

시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미

 

Fahrenheit

 

Synchronous = request 보내놓고, 처리 될때까지 기다리거나/다른일 하거나, 대기 타고 있다가, request 에대한 response 받으면, 그에 맞춰서 바로 다름 처리 시작하는거 == 끝나는 동시에 시작한다는게 이 의미임, Blocking 이랑 techinically 똑같지만, Blocking은 그냥 계속 기다림 -> Pending

 

 

 

Asynchronous = 자기 일 중심으로 돌리다가, 결과 돌아왔을때, 처리 할수도 있고 안 할수도 있음. priority 가 다른 것 인듯

 

이와같이, 동기와 비동기는, 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 판단 할 수 있음

 

Blocking/Sync

Blocking 의 관점은 제어권에 있음, Sync는 결과의 처리에 있음.

Blacoking = 관심 가지고 다 볼때까지 기다림.. 결과 받으면 바로 처리

 

어디로 사용되는가??

Python input method랑 비슷한 듯

결과 받을 때 까지 계속 기다렷다가, 결과 받으면 다음 처리 하는 것

제어권, 결과 같이 처리함

 

2. Non-Blocking/Sync

제어권은 나한테 있지만 sync (결과에 관심이있음) 니까 중간 중간 처리 어떻게 되고 있는지 물어보게됨

업무 계속 수행하다가 중간중간 계속 체크

 
 
 

Blocking/Sync와 큰 차이가 없다 하지만? 어떨때 사용할까?

게임에서 맵 넘어갈때, 맵 로드율이 얼마만큼인지 유저한테 보여줘야 할 경우가 잇다. 이럴때 사용함

즉 , 다른 작업 (맵 로딩하는 작업) 하면서, 얼만큼 완료 됫는지 물어볼때 (몇퍼 완료됬다) 이럴때 사용

 

3. Blocking/Async

Blocking 이기때문에, 자신의 작업에 대한 제어권이 없다. 근데 Async이기때문에 결과를 바로 처리 하지 않아도된다.

사실 잘 안씀, 보통 개발자들이 Non-Blocking/Async 로 쓰려다가 잘못 쓰는 경우가 많음

결과 받고 돌아가서 자기가 일 하고싶을떄 일함

 

4. Non-Blocking/Async

작업이 시작되도, 자기가 처리하던 작업을 멈추지 않고 계속함, 그래서 각자 알아서 작업 처리함

결과 받아도, 바로 처리하지 않고, 자신의 작업이 끝나면 그떄 처리함

 

어디에서 사용하는가?

API로 작업하다가, 콜백으로 추가적인 작업할때 사용하는게 대표적인 예시