Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 14 Current »

Introduction

이 글은 평소 많이 들어보았지만 혼동할 수 있는 Blocking, Non-Blocking / Synchronous, Asynchronous 에 대해서 설명하는 글 입니다.

Asynchronous는 비동기 웹 어플리케이션을 제작할 때 Ajax(Asynchronous Javascript and XML) 사용하면서 들어보셨을 것입니다.

단어 자체로 보면 Asynchronous와 non-blocking이 비슷해 보일 수 있지만 약간 다른 개념입니다.

각각이 어떤 것인지에 대해서부터 알아보겠습니다.

 


 

1. Blocking, Non-blocking / Synchronous, Asynchronous 란 ? 

Blocking : 프로세스가 시스템을 호출 하고나서 결과가 반환되기까지 다음 처리로 넘어가지 않음

Non-blocking : 시스템을 호출한 직후에 프로그램으로 제어가 다시 돌아와서 시스템 호출의 종료를 기다리지 않고 다음 처리로 넘어갈 수 있음

Synchronous : 작업을 요청한 후 작업의 결과가 나올 때까지 기다린 후 처리 ( 프로세스는 커널에 지속적으로 I/O 준비사항을 체크 )

Asynchronous : 직전 시스템 호출의 종료가 발생하면 그에 따른 처리를 진행

 


 

2. Synchronous blocking I/O

 

가장 기본적인 I/O 모델로 파일을 읽고 쓰는 일반적인 read,write 와 같은 I/O 시스템 호출을 의미한다. 

어플리케이션에서 Data Call 을 호출 한 후 시스템에서는 데이터가 어플리케이션 버퍼에 복사되기 전까지 리턴하지 않으며, 어플리케이션 프로세스는 자신의 작업을 중단한 채 대기한다. (CPU 등의 자원 낭비)

따라서, 여러 클라이언트가 접속하는 서버를 Blocking 방식으로 구현할 경우 하나의 클라이언트가 I/O 작업을 진행하면 해당 프로세스(Thread)가 진행하는 작업을 중단하게 되므로, 클라이언트별로 프로세스를 만들어 연결시켜야한다. 

하지만 접속자 수가 증가하면 Thread가 증가한다.


 

3. Synchronous Non-blocking I/O

어플리케이션에서 최초 데이터 요청 후 시스템에서 작업은 이어지고 시스템에서 Output이 준비되지 않은 상태를 어플리케이션에 즉시 반환하며 blocking 이 발생하지 않는다.

하지만 해당작업 이후 어플리케이션에서는 시스템으로 지속적인 데이터 상태 체크를 하게된다. 시스템 버퍼에 데이터가 저장될때까지 해당 작업을 지속한 후 시스템에서 데이터가 적재되면 그때 어플리케이션 버퍼에 저장된 후 종료된다.

이렇게 지속적으로 상태를 체크하여 데이터를 받는 방식을 Polling 이라 한다. Blocking에 대한 낭비는 없지만 반복적인 시스템 호출이 일어나게되므로 CPU 자원이 낭비된다.


 

4. Asynchronous blocking I/O

어플리케이션에서 최초 데이터 요청 후 시스템에서 작업은 이어지고 시스템에서 Output이 준비되지 않은 상태를 어플리케이션에 즉시 반환하며 어플리케이션은 blocking 상태로 대기한다.

대기 상태에서 시스템에서 Output이 준비되었다는 신호를 주게되고 어플리케이션에서 데이터 상태 체크 후 Output을 받아오게된다.

 


 

5. Asynchronous Non-blocking I/O

AIO (Asynchoronous I/O) 시스템 호출을 하면 버퍼의 포인터, 크기 및 완료시 통지 방법 등을 시스템에 전달하고 즉시 리턴한다. 이 후 데이터가 버퍼에 복사되어 준비가 완료되면 어플리케이션으로 신호를 발생하여 알려준다.

입력과 출력 사이의 Blocking이나 상태 체크가 없기 때문에 그 사이에 다른 프로세스를 진행할 수 있는 장점이 있다.


 

Conclusions

대부분 오해할 수 있는 내용으로 Blocking = Synchronous, Non-blocking = Asynchronous 로 오해할 수 있습니다. 

하지만 4개는 각각 다른 개념이며 서로 조합하여 새로운 개념으로 표현됩니다.

Asynchonous Blocking I/O 의 대표적인 예로  Ajax 가 있으며, 가장 효율적이라고 할 수 있는 Asynchronous Non-blocking I/O는 Web Socket이 있습니다.


 

References

 

Related Information

 

There is no content with the specified labels

  • No labels