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. 논블로킹 동작


- 논블로킹은 제어권을 넘기지 않음
'프로그래밍 > 용어' 카테고리의 다른 글
| [용어/개념] 루틴(Routine), 코루틴(Coroutine) (0) | 2025.01.02 |
|---|---|
| [용어/개념] 스케줄링(Scheduling) (0) | 2025.01.02 |
| [용어/개념] 프로그램(Program), 프로세스(Process), 스레드(Thread) (0) | 2024.12.24 |
| [용어/개념] 동시성(Concurrency), 병렬성(Parallelism) (0) | 2024.12.24 |