선릉역 1번 출구

blocking and nonblocking / Synchronous and Asynchronous 본문

Computer/CS

blocking and nonblocking / Synchronous and Asynchronous

choideu 2023. 1. 8. 23:35

블록킹과 논블록킹 그리고 동기와 비동기는 직접적인 관련은 없음

 

동기와 비동기: 프로세스의 수행 순서 보장에 대한 매커니즘

블록킹과 논블록킹: 프로세스의 유휴 상태에 대한 개념

 

제어권: 자신의 코드를 실행할 권리로 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려줌

결과값을 기다림: A 함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부를 의미


동기와 비동기

- 처리해야 할 작업들을 어떤 흐름으로 처리할 것인가에 대한 관점으로, 호출되는 함수의 작업 완료 여부를 신경쓰느냐에 따라 함수 실행/리턴 순차적인 흐름을 따르느냐와 안따르느냐의 관심사임

동기: 함수 A가 함수 B를 호출했을 때, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것

비동기: 함수 A가 함수 B를 호출했을 때, 함수 B의 리턴값을 신경쓰지 않고 작업 완료 후 callback 함수를 실행함


블록킹과 논블록킹

- 처리되어야 하는 하나의 작업이, 전체적인 작업 흐름을 막느냐 안막느냐에 대한 관점으로 제어권이 누구에게 있느냐가 관심사

블록킹: 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작

  • A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B에게 넘겨줌
  • A 함수는 제어권을 넘겼기 때문에 함수 실행을 멈춤
  • B 함수가 자신의 함수를 실행하고, 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려줌
  • A 함수는 다시 함수를 실행함

논블록킹: 다른 주체의 작업에 관련없이 자신의 작업을 하는 것

  • A 함수가 B 함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가짐
  • A 함수는 계속 제어권을 가지고 있기 때문에 B 함수를 호출한 이후에도 자신의 코드를 계속 실행함

동기와 비동기, 블록킹과 논블록킹의 조합

  •  Sync-Blocking
    • 함수는 다른 함수의 리턴값을 고려해서 동작(동기)
    • 함수는 다른 함수에게 제어권을 넘겨주고 대기 (블로킹)
  • Sync-NonBlocking
    • 함수는 다른 함수의 리턴값을 고려해서 동작 (동기)
    • 함수는 다른 함수에게 제어권을 주지 않고 자신의 코드를 계속 실행 (논 블로킹)
  • Async-Blocking
    • 함수는 다른 함수의 리턴 값을 고려하지 않고 동작 (비동기)
    • 함수는 다른 함수에게 제어권을 넘겨주고 대기 (블로킹)
    • Sync-Blocking과 비교했을 때 이점이 없기 때문에 거의 사용되지 않음 -> 의도치 않게 실수로 사용
  • Async-NonBlocking
    • 함수는 다른 함수의 리턴 값을 고려하지 않고 동작(비동기)
    • 함수는 다른 함수에게 제어권을 주지 않고 자신의 코드를 계속 실행(논 블로킹)
    • 함수가 다른 함수를 호출할 때 제어권을 주지 않고 자신의 코드를 계속 실행 -> 함수가 다른 함수를 호출할 때 콜백함수를 함께 전달해 다른 함수는 자신의 작업을 처리하면 콜백 함수를 실행

동영상 예제 설명

Sync-Blocking

- 사원이 서류를 상사에게 주고, 상사가 서류를 다 읽을 때까지 기다림

- 서류를 다 읽고 나서 결과를 사원에게 전달

- 사원은 해당 업무를 바로 처리

ex) 자바에서 입력 요청을 할 때 사용함

 

Sync-NonBlocking

- 사원이 서류를 상사에게 주고, 상사는 서류를 다 읽을 때까지 사원의 할 일을 하라고 함

- 사원은 중간중간 끝났냐고 물어봄

- 사원은 자신의 업무를 보다가 상사가 서류를 다 읽어 결과를 전달하면 사원은 바로 업무를 처리함

 

Async-Blocking

- 사원이 서류를 상사에게 주고, 상사가 서류를 다 읽을 때까지 기다림

- 서류를 다 읽고 나서 결과를 사원에게 전달(이때 sync와 다른 점은 사원은 결과에 집착하지 않음)

- 사원은 시간이 될 때 받은 결과값을 가지고 처리

 

Async-NonBlocking

- 사원이 서류를 상사에게 주고, 상사는 서류를 다 읽을 때까지 사원의 할 일을 하라고 함

- 서류를 다 읽고 나서 결과를 사원에게 전달(이때 sync와 다른 점은 사원은 결과에 집착하지 않음)

- 사원은 시간이 될 때 받은 결과값을 가지고 처리

 

참고 사이트

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

 

👩‍💻 동기 & 비동기 / 블로킹 & 논블로킹 💯 완벽 이해하기

동기 & 비동기 vs 블로킹 & 논블록킹 개념 이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들이 서로 뭔가 연관이 있는 것으로 오해하기 쉽다. 아무래도 동기와 블록킹,

inpa.tistory.com

https://jaehoney.tistory.com/242

 

블로킹(Blocking)과 논 블로킹(Non-Blocking)이란 무엇인가?!

동기와 비동기, 블로킹과 논 블로킹을 같은 것이나 비슷한 것이라고 오해하는 경우가 많다. 해당 개념들은 전혀 다른 개념이며 직접적인 관련이 없다. 그 차이에 대해서 정리해보자. 동기 & 비동

jaehoney.tistory.com

https://www.youtube.com/watch?v=oEIoqGd-Sns 

 

'Computer > CS' 카테고리의 다른 글

컴퓨터 구조(6) - 메모리와 캐시 메모리  (0) 2022.11.15
컴퓨터 구조(5) - CPU의 속도  (0) 2022.11.15
컴퓨터 구조(4) - CPU  (0) 2022.11.13
컴퓨터 구조(3) - 명령어  (0) 2022.11.12
컴퓨터 구조(2) - 정보 단위  (0) 2022.11.12
Comments