1. 동기(Synchronous) / 비동기(Asynchronous)

  • 동기/비동기요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점이다.
  • 동기/비동기출력 순서와 관련된 개념

 

1-1. 동기(Synchronous)

  • Synchronous는 Syn(함께), Chrono(시간) 2개의 단어가 합쳐진 단어이며, 작업 시간을 함께 맞춰서 실행한다라는 뜻.
  • 순서대로 작업을 수행하여 하나의 루틴을 완료한 후 다른 루틴을 실행하는 방식
  • 다양한 기능이 한꺼번에 일어나는 다중 실행 환경에서는 성능상의 제약 발생
    = 예) UI, 데이터 다운로드를 동시에 대응해야 하는 경우

 

1-2. 비동기(Asynchronous)

  • Asynchronous는 앞에 A라는 접두사가 붙어 부정하는 형태.
  • 동기와 반대로 요청한 작업에 대해 완료 여부를 따지지 않기 때문에 자신의 다음 작업을 그대로 수행하게 된다.
  • 다양한 기능을 동시에 수행할 수 있는 방식
  • 전통적인 스레드를 이용하거나 RxJava, Reactive와 같은 서드파티 라이브러리에서 제공
  • 코틀린에서는 코루틴(coroutines)을 기본으로 제공

 

1-3. 비동기의 성능 이점

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

 

2. 블로킹(Blocking) / 논블록킹(Non-Blocking)

  • 블로킹/논블록킹은 단어 그대로 현재 작업이 block(차단, 대기)되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점이다.
  • 블로킹/논블로킹병렬 실행과 관련된 개념

 

2-1. 블로킹 동작

- 블로킹은 제어권을 넘김

* 제어권 : 제어권은 간단히 말해 함수의 코드나 프로세스의 실행 흐름을 제어할 수 있는 권리같은 것이다

 

2-2. 논블로킹 동작

- 논블로킹은 제어권을 넘기지 않음

 

+ Recent posts