동기, 비동기 / blocking, non-blocking

smlee·2023년 8월 21일
0

Network

목록 보기
6/6

JVM 상에서 동시성과 분산 애플리케이션을 단순화하는 Akka를 공부하기 앞서, 관련 배경 지식을 공부하던 중 동기(Synchronous), 비동기(Asynchronous), Blocking, Non-blocking이라는 용어들이 계속 사용되어 정리하고 넘어가려고 한다.

Asynchronous & Synchronous

동기와 비동기의 차이작업을 순차적으로 수행할지 여부이다. 즉, 내부 함수를 호출한 외부 함수가 내부 함수의 return 여부를 신경 쓰는지 여부로 구분할 수 있다.

  • Synchronous : 호출된 함수의 수행 결과 및 종료를 호출된 함수 뿐만 아니라 호출한 함수도 함께 신경 쓰는 경우
  • Asynchronous : 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경 쓰고 처리하면 비동기이다.


위와 같이 비동기식을 사용하면 작업 완료 여부를 따지지 않으므로 내부 프로세스 B를 호출한 외부 프로세스 A는 계속 작업을 이어나간다.

비동기 처리 (Asynchronous)


비동기는 요청한 작업에 대하여 완료 여부를 신경 쓰지 않고 자신의 그 다음 작업을 수행한다. 즉, I/O 작업과 같은 느린 작업이 발생할 때 기다리지 않고 다른 작업을 처리할 수 있다. 따라서, 비동기를 사용하면 전반적인 성능 향상에 도움을 줄 수 있다.

그리고, 비동기의 또다른 특징은 요청한 작업에 대해 순서가 지켜지지 않을 수 있다는 점이다. 위처럼, 동기는 a-b-c의 작업 순서가 유지되지만, 비동기 처리는 작업이 불규칙한 것을 알 수 있다.

Blocking & Non-Blocking


Blocking과 Non-Blocking의 차이점은 다른 작업을 처리하기 위해 현재 작업을 Block시키는지 여부로 결정한다. 즉, 제어권의 유무가 Blocking과 Non-blocking의 차이가 된다.

  • Blocking : 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 return하지 않는 경우 = 내부 함수로 제어권이 넘어간 경우 / 함수 종료 시점과 제어권을 넘김 시점이 같음

  • Non-Blocking : 호출된 함수가 자신의 할 일을 마치지 않았더라도 바로 제어권을 return하여 호출한 함수가 다른 일을 진행할 수 있도록 하는 경우

동기/비동기 vs 블록킹/논블록킹

사실 그림으로만 보며 공부했을 때는 매우 헷갈렸다. 하지만, 문장으로 정리하면 동기/비동기는 "전체적인 작업에 대한 순차적인 흐름의 유무"라고 생각할 수 있으며, 블로킹/논블로킹은 "전체적인 작업의 흐름 자체를 막냐 안 막냐"로 구분을 할 수 있다.

따라서 동기/비동기와 블록킹/논블록킹을 합해서 정리하면 위와 같다.

0개의 댓글