Nonblocking

Nonblocking

Creator
Creator
Alan JoAlan Jo
Created
Created
2020 Jan 25 16:12
Editor
Editor
Alan JoAlan Jo
Edited
Edited
2023 Feb 28 15:52
Refs
Refs
Synchronous/Asynchronous는 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사다.
Non-blocking은 크게 보았을 때, 두 가지 의미
 
  • Non-blocking I/O(Asynchronous I/O 혹은 Non-sequential I/O)
    • Non-blocking I/O란, 입출력 처리를 기다리는 방법을 말한다
    • synchronous I/O 혹은 blocking I/O를 통해 I/O 작업을 진행하는 동안 프로그램의 진행을 멈추고(block) 기다리는 방식이 사용되었으나
    • Non-blocking 외부에 I/O 작업을 하도록 요청한 후 즉시 다음 작업을 처리
      • 후속 작업이 프로세스를 멈추지 않도록 만들기 위해, I/O 작업이 완료된 이후 후속 작업을 이어서 진행할 수 있도록 별도의 약속(PollingCallback function 등)을 한다.
 
물흐르듯 간다 이말씀
  • Concurrency란 각 프로그램 조각들이 실행 순서와 무관하게 동작할 수 있도록 만들어 한 번에 여러 개의 작업을 처리할 수 있도록 만든 구조이다.
  • Parallelism작업자를 물리적으로 여럿 둠으로써 같은 작업을 동시에 수행할 수 있도록 만드는 것이다.
Concurrency와 Parallelism은 혼동하기 쉬운 개념이지만, 서로 의존관계가 없이 분리되어 있는 개념이다.
Parallelism은 한 개의 프로세서에서는 확보할 수 없는 개념이다. 한 개의 프로세서가 같은 시간에 두 개의 작업을 수행하는 것은 물리적으로 불가능하기 때문이다.
한 개의 프로세서만 있다고 하더라도 동시성을 확보할 수 있다. 잘개 쪼갠 작업들이 서로 영향을 끼치지 않는다면, 하나의 작업자가 각 작업이 완료되지 않았더라도 번갈아가며 수행하는 것이 가능하다.
Concurrency는 작업을 처리하는 방식을 개선함으로써 효율화를 가져오는 것이 목적이며
Parallelism은 자원 자체를 늘림으로써 작업의 처리량을 늘리는 것이 목적이다.
I/O 작업을 멈추지 않고 기다리는 방식을 구체적으로 분류하면 Synchronous Non-blocking I/O와 Asynchronous blocking I/O 등으로 구분할 수 있기 때문에 이를 비교해보는 것은 의미가 있다.
Asynchronous Programming을 위한 재료로써 Concurrency를 확보하거나 혹은 Non-blocking I/O를 활용할 수 있으나, 이것이 Asynchronous Programming의 필수조건은 아니다.
예를 들어 Event-loop를 사용하여 동시성을 확보했으나, I/O 작업의 성격에 따라 그 처리를 위해 blocking I/O 모델을 사용할 수 있다. Blocking I/O를 사용했어도 이 부분이 별도의 채널을 통한 작업으로 이루어짐으로써 이 프로그램의 주 실행흐름(event-loop)을 막지 않았다면, 이 프로그램은 Asynchronous Programming이라고 부를 수 있다.
스레딩은 block, sync 아니면 다 쓸수 있는 내부적 구현법
 
 
 
 

Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사

Good Explaination

 
 

Recommendations