본문 바로가기

기초이론/운영체제

동기(synchronous)와 비동기(asynchronous), 블로킹(blocking)과 논블로킹(non_blocking)

동기(synchronous)

  • 요청과 결과가 동시에 일어나는 것으로, 요청을 하게되면 결과가 나올때까지 아무것도 못하고 대기해야하는 작업입니다.
  • 하나의 작업이 완전히 끝난 후에만 또 다른 작업을 진행할 수 있습니다.
  • 얘를 들어 컴퓨터를 킨다고 가정해보자. 컴퓨터가 켜지기 전까지 사용자는 인터넷을 사용하거나 다른 프로그램들을 실행시킬 수 없다. 컴퓨터가 완전히 켜지기 전까지 기다리기만 해야하는 것이다.

비동기(asynchronous)

  • 요청과 결과가 동시에 일어나지 않는 것으로, 요청을 한 후에 결과를 기다리지 않고 다른 요청이나 활동을 해도 되는 작업입니다.
  • 요청을 한 후에 결과가 도출되는 시간 동안 다른 작업을 수행할 수 있습니다.

동기(synchronous)와 비동기(asynchronous)의 차이점

  • 처리해야 할 작업들을 어떤 흐름으로 처리할 것인가에 따라 구분됩니다.
  • 작업 완료 여부로 구분할 수 있으며, 완료가 되었으면 동기,  완료 여부가 상관이 없으면 비동기로 구분합니다.
  동기(synchronous) 비동기(asynchronous)
장점 설계가 간단하며 직관적입니다. 자원을 효율적으로 사용할 수 있습니다.
단점 요청에 대한 결과가 나올때까지 아무것도 할 수 없다. 동기보다 설계가 복잡하다.

 


블로킹(blocking)

  • 동기의 개념에서 만들어진 상태입니다.
  • 하나의 작업을 진행하는 동안 다른 작업을 할 수 없는 상태를 말합니다.

논블로킹(non_blocking)

  • 비동기의 개념에서 만들어진 상태입니다.
  • 하나의 작업을 진행하는 동안 다른 작업을 할 수 있는 상태를 말합니다.

블로킹(blocking)과 논블로킹(non_blocking)의 차이점

  • 처리해야하는 작업이 전체적인 작업 흐름을 막는지, 안막는지에 따라 구분됩니다.
  • 예시를 들어보자면 다음과 같습니다.
    • 학생이 시험을 본 후에 시험지를 선생님에게 갖다 주었습니다. 이 때에 학생이 취할 행동은 두 가지로 나뉩니다.
      1. 시험지를 돌려받을 때 까지 아무것도 하지 않고 대기한다. ( = 블록 상태)
      2. 시험지를 돌려받기 전까지 다른 과목을 공부하거나 다른 행위를 한다. (= 논블록 상태)

동기(synchronous)와 블로킹(blocking) = Sync_Blocking

  • 우리가 알고있던 일반적인 동기와 비슷합니다.
  • A라는 작업이 시작되면 B라는 작업은 A라는 작업이 끝나기 전까지는 아무것도 할 수 없습니다.
  • 함수 A 와 함수 B 가 있다고 가정했을때 다음과 같습니다.
    1. 함수 A는 함수 B의 리턴값을 필요로 합니다. ( = 동기)
    2. 그렇기에 제어권을 함수 B에게 넘겨주고 함수 B가 리턴값과 제어권을 돌려줄때 까지 대기합니다. ( = 블로킹)
  • EX ) 리눅스나 CMD 등을 사용할 때에, 명령어를 입력한 후에 해당 명령에 대한 결과가 나오기까지 기다려야합니다.

Sync_Blocking

 


동기(synchronous)와 논블로킹(non_blocking) = Sync_NonBlocking

  • 모든 실행과 흐름이 순차적으로 진행되기에 개발자가  프로그렘을 제어하기 쉽고, 가장 많이 쓰이는 조합 중 하나입니다.
  • 함수 A 와 함수 B 가 있다고 가정했을때 다음과 같습니다.
    1. A가 B 함수를 호출합니다.
    2. 이 때, A 함수는 B 함수에게 제어권을 주지 않은 상태로 자신의 작업을 계속해서 수행합니다. ( = 논블로킹)
    3. 하지만 결국 B 함수의 리턴값이 필요하기에 계속해서 B 함수에게 작업을 다 완료했는지 물어봅니다.  ( = 동기)
  • EX) 로딩이 뜨는 화면에서 화면을 보여주는 함수를 호출했지만, 화면을 다 그리지 못했기에 정상적인 화면을 보여주지 못하고 로딩창을 보여주는 것을 예시로 들 수 있습니다. 

 

Sync_NonBlocking


비동기(asynchronous) 논블로킹(non_blocking) = Async_NonBlocking

  • 성능과 자원의 효율 등에서 가장 우수하여 많이 쓰이는 조합 중 하나입니다.
  • 함수 A 와 함수 B 가 있다고 가정했을때 다음과 같습니다.
    1. A 함수는 B 함수를 호출합니다.
    2. 이 때 A 함수는 제어권을 B 함수에게 넘겨주지 않은 상태로 자신의 작업을 계속해서 수행합니다. ( = 논블로킹)
    3. 단, B 함수를 호출할 때에 콜백함수를 함께 줍니다. 이로 인해 B 함수는 자신의 작업이 끝난 후에 A 함수가 준 콜백함수를 실행합니다. ( = 비동기)
  • EX) 대리 A 가 사원 B 에게 작업할 업무를 나눠줍니다. 그 후에 대리 A 는 사원 B 가 작업을 완료할 때 까지 아무런 신경도 쓰지 않고 자신의 업무를 수행합니다.

Async_NonBlocking

 

 

 


비동기(asynchronous) 블로킹(blocking) = Async_Blocking

  • 사용하는 경우가 거의 없으며 비동기+논블로킹 방식을 사용하는 과정에서 의도치 않게 발생하기도 한다.
  • 함수 A 와 함수 B 가 있다고 가정했을때 다음과 같습니다.
    1. A 함수는 B 함수의 리턴값을 신경쓰지 않고 콜백함수를 보냅니다.  ( = 비동기)
    2. 이 때 A 함수는 B 함수에게 제어권을 같이 넘깁니다.  ( = 블로킹)
    3. 이로 인해 A 함수는 B 함수가 작업이 끝나고 제어권을 돌려줄 때 까지 기다려야 합니다.
  • EX) A 대리가 B 사원에게 업무를 분담했는데, 분담한 업무가 동일한 분야이기 때문에 B 사원이 작업한 결과를 가지고 A 대리가 추가 작업을 해야합니다. 그렇기 때문에 A 대리는 B 사원이 작업을 끝낼때 까지 대기해야 합니다.

 

 

Async_Blocking

 


출처

https://private.tistory.com/24

 

동기와 비동기의 개념과 차이

데이터를 받는 방식인 동기와 비동기. 이 둘의 개념에 대해 설명하는 게시물은 매우 많은데 프로그래밍적으로 생각했을 때 이해가 가지 않아서 쉽게 이해를 할 수 있는 동기와 비동기의 예가

private.tistory.com

https://velog.io/@slobber/%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

동기와 비동기의 차이

오늘은 개발을 하다보면 자주 등장하는 동기와 비동기 개념에 대해 알아보겠습니다.

velog.io

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#1-sync-blocking

 

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

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

inpa.tistory.com

 

'기초이론 > 운영체제' 카테고리의 다른 글

파일시스템(File System)  (0) 2022.10.17