본문 바로가기

카테고리 없음

Blocking, Non-blocking, Asynchronous, Synchronous

어떻게 싱글스레드 기반인 노드나, 레디스가 동시에 수많은 요청을 처리할 수 있을까?
A요청을 받고 A를 처리하는 도중에 또 다른 B 요청을 어떻게 받을 수 있을까~? 싱글스레드인데..

 이런 상황에서 나오는 키워드가 있다. Blocking, Non-blocking, Asynchronous, Synchronous...

이번 포스팅에서는 이 용어들의 차이에 대해서 알아보도록하자.

 

 

Blocking vs Non-blocking

  • 대기 Queue에 들어가서 자기 차례를 기다리느냐
  • 리턴값이 시스템콜이 완료되고 오느냐 바로오느냐 

 

Asynchronous vs Non-blokcing

  • 시스템콜이 즉시 리턴되는 것은 동일
  • 이때 데이터와 함께오면 Non-blocking (  polling 방식으로 계속확인)
  • 함께오지않고 완료되면 콜백을 보내는 것이 Asynchronous

 

Synchronous vs Asynchronous

  • 시스템콜의 완료를 기다리느냐 기다리지 않느냐

 

Synchronous vs Blocking

  • 시스템콜의 리턴을 기다리는동안 대기 큐에 머무는 것이 필수(blocking)냐 필수가 아니냐

 

 

 

결론

1. 다수의 클라이언트에 요청마다 쓰레드를 만들지 않고 동시성이 가능한 이유는 I/O 멀티플렉싱 개념(select, poll, epoll)

2. 명령어를 처리하는 것과 I/O 를 처리하는 것은 다른개념이기 때문에 하나의 쓰레드로 명령어를 처리하면서,

     시간이 오래걸리는 I/O 작업은 기다리지 않고(Non-blocking) 바로 다음 명령어를 처리함

 

참고

TODO

  • I/O 멀티플렉싱