Post

Blocking, Non-Blocking, Synchronous, Asynchronous 차이점

1. Blocking과 Non-Blocking

블로킹(Blocking)과 논블로킹(Non-Blocking)은 다른 주체가 작업할 때 자신의 제어권이 있는지 없는지로 구분한다.

1) Blocking

Blocking은 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않는 상황을 의미한다.

  • 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 반환하지 않는다.

  • 다른 작업을 수행할 수 없게 만든다.

  • CPU 자원을 효율적으로 사용하지 못한다.

  • 예시: 동기적인 파일 I/O 작업이 블로킹 방식이다. 파일을 읽거나 쓸 때, 해당 작업이 완료될 때까지 다른 코드 실행이 중단된다.

2) Non-Blocking

Non-Blocking은 호출된 함수가 자신이 할 일을 모두 마치지 않았더라도 바로 제어권을 건네주어 호출한 함수가 다른 일을 진행할 수 있도록 해주는 상황을 의미한다.

  • 호출된 함수가 바로 제어권을 호출한 함수에게 반환한다.

  • 작업의 완료 여부와 상관없이 호출한 함수는 다른 작업을 계속할 수 있다.

  • 예시: 비동기적인 파일 I/O 작업이 논블로킹 방식이다. 파일을 읽거나 쓸 때, 다른 코드 실행을 중단하지 않고 작업을 수행한다.

2. Synchronous와 Asynchronous

동기(Synchronous)와 비동기(Asynchronous)는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 없는지로 구분한다.

1) Synchronous

Synchronous는 호출된 함수의 수행 결과 및 종료를 호출한 함수와 함께 신경 쓰는 경우를 의미한다.

  • 결과를 돌려줄 때 결과와 순서에 관심이 있는 방식이다.

  • 호출된 함수의 수행 결과 및 종료를 호출한 함수와 함께 신경 쓴다.

  • 예시: 함수 호출 후 결과를 기다리는 동안 다른 작업을 수행하지 않는 것이 동기 방식이다.

2) Asynchronous

Asynchronous는 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 쓰고 처리하는 경우를 의미한다.

  • 결과를 돌려줄 때 결과와 순서에 관심이 없는 방식이다.

  • 시작과 종료가 일치하지 않고 끝나는 동시에 시작하지 않는다.

  • 예시: 비동기적인 네트워크 요청이 비동기 방식이다. 요청을 보낸 후 결과를 기다리지 않고 다른 작업을 수행할 수 있다.

3. 정리

블로킹과 동기 방식은 작업의 순서와 완료를 엄격하게 관리한다. 반면, 논블로킹과 비동기 방식은 작업의 효율성과 자원 사용의 최적화에 초점을 맞춘다.

애플리케이션의 성능과 사용자 경험에 큰 영향을 미치기 때문에 적절한 상황에서 각각의 방식을 선택하여 사용하는 것이 중요하다.

comparison

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.