CS 지식/운영체제

동기 vs 비동기, 블로킹 vs 논블로킹

naksnaks 2023. 2. 20.
반응형

동기 & 비동기

  • 처리해야 할 작업들을 어떠한 흐름으로 처리 할 것인가에 대한 관점
  • 호출되는 함수의 작업 완료 여부신경쓰는지의 여부의 차이입니다.

동기(Synchronous)

요청과 그 결과가 동시에 일어난다는 뜻.

  • 요청과 결과가 한 자리에서 동시에 일어납니다.(시간이 오래 걸리면 대기해야 합니다)
  • A노드와 B노드 사이의 작업 처리 단위( transaction ) 을 동시에 맞추겠다는 뜻.
  • 함수A가 함수B를 호출한 뒤, 함수B의 리턴 값을 계속 확인하면서 신경씁니다.

동기 방식의 예

동기방식의 예


출처 : https://dev-coco.tistory.com/46

  1. A의 계좌에서 10,000원을 뺄 생각을 하고 있습니다.
  2. A의 계좌가 B의 계좌에 10,000원을 송금합니다.
  3. B의 계좌는 10,000원을 받았다는 걸 인지하고, A의 계좌에 10,000원을 받았다고 전송합니다.
  4. A, B 계좌 각각 차감과 증가가 동시에 발생합니다.
  • A의 계좌와 B의 계좌는 1~3의 과정을 거친 후 동시에 금액의 차감과 증가가 이루어져야 합니다. 이러한 계좌 이체 같은 작업은 동기방식으로 진행해야 오류가 없을 것입니다.

비동기(Asynchronous)

요청과 결과가 동시에 일어나지 않는다는 뜻.

  • 요청한 그 자리에서 결과가 주어지지 않습니다.
  • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 됩니다.
  • 함수A가 함수B를 호출할 때 콜백 함수를 함께 전달해서, 함수B의 작업이 완료되면 함께 보낸 콜백 함수를 실행합니다.

비동기 방식의 예

비동기 방식의 예


출처 : https://dev-coco.tistory.com/46

  1. 학생은 시험 문제를 풉니다.
  2. 시험 문제를 모두 푼 학생은 선생에게 전송합니다.
  3. 선생은 학생의 시험지를 채점합니다.
  4. 채점이 다 된 시험지를 학생에게 전송합니다.
  5. 학생은 시험지를 받아 결과를 확인합니다.
  • 학생과 선생은 시험지라는 연결고리가 있지만, 시험지에 행하는 행위(목적)는 서로 다릅니다.
  • 학생은 시험지를 푸는 역할이고, 선생은 시험지를 채점하는 역할을 수행합니다.
  • 서로의 행위(목적)가 다르기 때문에 둘의 작업 처리 시간은 일치하지 않고, 일치하지 않아도 됩니다.

동기 vs 비동기

동기

  • 장점
    • 설계가 간단, 직관적
    • 전송 속도가 빠름
  • 단점
    • 결과가 주어질 때까지 대기

비동기

  • 장점
    • 결과 대기중 다른 작업 가능(자원의 효율적 사용)
  • 단점
    • 동기보다 복잡
    • 전송 속도가 느림

전송 속도
동기는 데이터의 전송이 없더라도 클럭 신호는 계속 주고 받습니다.
A와 B는 서로 데이터만 보내면 되기에 전송 속도가 빠르게 됩니다.
하지만 비동기는 평상시 클럭 신호를 보내지 않기 때문에 데이터 통신에서 전송할 때 Start bit > 데이터 > Stop bit 순으로 데이터를 보냅니다.
따라서 동기에 비해 전송 속도가 느립니다.

블로킹

블로킹


출처 : https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

  • A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨줍니다.
  1. A 함수가 B함수를 호출하면 B에게 제어권을 넘겨줍니다.
  2. B는 함수를 실행하고, A는 함수 실행을 잠시 멈춥니다.
  3. B함수의 실행이 끝나면 본인을 호출한 A에게 제어권을 돌려줍니다.

논블로킹

논블로킹


출처 : https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

논블로킹은 A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는 것입니다.

  1. A함수가 B함수를 호출하면, B함수는 실행되지만, 제어권은 A함수가 그대로 가지고 있습니다.
  2. A함수는 B를 호출하고 나서도 계속 A함수를 실행합니다.

동기, 비동기 & 블로킹, 논블로킹 비교

1) Sync-Blocking

동기 블로킹


출처 : https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

  • 함수 A는 함수 B의 리턴값을 필요로 합니다(동기). 그래서 제어권을 함수 B에게 넘겨주고, 함수 B가 실행을 완료하여 리턴값과 제어값을 돌려줄 때 까지 기다립니다.(블로킹)

2) Sync-Nonblocking

동기 논블로킹


출처 : https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

A 함수는 B 함수를 호출합니다. 이 때 A 함수는 B 함수에게 제어권을 주지 않고, 자신의 코드를 계속 실행합니다.(논블로킹)

그런데 A 함수는 B 함수의 리턴값이 필요하기 때문에, 중간중간 B 함수에게 함수 실행을 완료했는지 물어봅니다.(동기)

3) Async-Nonblocking

비동기 논블로킹


출처 : https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

  • A 함수가 B 함수를 호출할 때, 제어권을 B에 주지 않고 자신이 계속 가지고 있습니다.(논블로킹) 또한, A 함수를 계속 실행합니다. 그리고 B 함수를 호출할 때 콜백함수를 함께 줍니다. B 함수는 자신의 작업이 끝나면 A 함수가 준 콜백 함수를 실행합니다.(비동기)

4) Async-Blocking

비동기 블로킹


출처 : https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

A 함수는 B 함수의 리턴값에 신경쓰지 않고, 콜백 함수를 보냅니다.(비동기)

그런데, B 함수의 작업에 관심없음에도 불구하고, A 함수는 B 함수에게 제어권을 넘깁니다.(블로킹)

따라서 A 함수는 자신과 관련 없는 B 함수가 끝날 때까지 기다려야 합니다.

참조
109dev님 - 동기와 비동기의 개념과 차이
coco3o님 - 동기와 비동기의 개념과 차이
인파님 - 동기 & 비동기 / 블로킹 & 논블로킹 완벽 이해하기
nittre님 - 블로킹 vs 논블로킹, 동기 vs 비동기

반응형

'CS 지식 > 운영체제' 카테고리의 다른 글

Deadlock(데드락)  (0) 2023.02.20
프로세스(Process) vs 스레드(Thread)  (2) 2023.02.16
메모리의 구조  (0) 2023.02.16
컨텍스트 스위칭(Context Switching)  (0) 2023.02.13

댓글

💲 추천 글