Blocking/Non-blocking

유재우·2022년 11월 20일
0

CS공부

목록 보기
11/26

시작에 앞서

동기/비동기와 Blocking/Non-blocking이 같은 것이나 비슷한 것이라고 오해 하는 경우가 많은데 전혀 다른 개념이다.

동기/비동기

프로세스의 수행 순서 보장에 대한 매커니즘

즉 처리해야 하는 작업들을 어떠한 흐름으로 처리할 것이냐에 관점을 둔다.

  • 동기: 다른 작업이 끝나는 동시에 시작한다.
  • 비동기: 다른 작업이 끝나지 않아도 시작한다.

Blocking/Non-blocking

처리되어야 하는 작업이 전체적인 작업 흐름을 막는 지에 대한 관점

Blocking

자신의 작업을 진행하다가 다른 주체의 작업이 시작되면
작업을 멈추고 해당 작업을 기다렸다가 다시 작업을 시작


1. 유저는 커널에게 read 작업을 요청
2. 커널은 데이터가 입력될 때까지 무한정 대기(Blocking)

=> 리소스가 일을 하지않고 낭비된다.
  1. 데이터가 입력되면 커널이 유저에게 결과를 전달

Non-blocking

다른 주체의 작업에 관련없이 자신의 작업을 하는것


1. 유저가 커널에게 read 작업을 요청
2. 커널은 데이터 입력 여부와 관계 없이 결과를 반환
3. 이후 커널은 유저로 부터 입력 데이터가 올 때까지 수차례 확인
4. 입력 데이터가 있으면 커널이 유저에게 결과를 전달

단점
입력 데이터를 보냈는 지 수시로 확인한다.

조합

Sync-Blocking

  • 함수는 다른 함수의 리턴값을 고려해서 동작 (동기)
  • 함수는 다른 함수에게 제어권을 넘겨주고 대기 (블로킹)

Sync-NonBlocking

  • 함수는 다른 함수의 리턴값을 고려해서 동작 (동기)
  • 함수는 다른 함수에게 제어권을 주지 않고 자신의 코드를 계속 실행 (논 블로킹)

Async-Blocking

  • 함수는 다른 함수의 리턴 값을 고려하지 않고 동작 (비동기)
  • 함수는 다른 함수에게 제어권을 넘겨주고 대기(블로킹)

    Sync-Blocking과 비교했을 때 이점이 없기 때문에 거의 사용되지 않는다. -> 의도치 않게 실수로 사용된다.

Async-NonBlocking

  • 함수는 다른 함수의 리턴 값을 고려하지 않고 동작 (비동기)
  • 함수는 다른 함수에게 제어권을 주지 않고 자신의 코드를 계속 실행 (논 블로킹)

정리하면 함수가 다른 함수를 호출할 때 제어권을 주지 않고 자신의 코드를 계속 실행한다.
함수가 다른 함수를 호출할 때 콜백 함수를 함께 줘서 다른 함수는 자신의 작업을 처리하면 콜백 함수를 실행한다.

EX) AJAX 요청/JS 비동기 콜백

참고한 블로그 링크

profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글