개발자 면접 공부/운영체제,CS

블로킹(Blocking), 논 블로킹(Non-Blocking), 동기(Sync), 비동기(ASync)

chogyujin 2022. 8. 18. 22:26
728x90

오늘은 블로킹, 논 블로킹 추가로 동기, 비동기에 대해 알아보겠습니다.


동기&비동기 vs 블로킹&논블록킹 개념 차이

이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들이 서로 뭔가 연관이 있는 것으로 오해하기 쉽다.

아무래도 동기와 블록킹, 비동기와 논블록킹의 작동 매커니즘이 더 직관적이기 때문에 많은 사람들이 이 개념들을 같은것 혹은 비슷한 것으로 오해하고 있다.

이 두가지 개념은 서로 전혀 다른 곳에 초점을 맞춘 개념들이므로 서로 직접적인 관련은 거의 없다고 봐도 된다.
단지 조합하여 사용되는 것 뿐이다.

 

다음의 두 용어를 짚고 넘어야 한다.


-제어권 : 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행 한 후, 자신을 호출한 함수에게 돌려준다.

 

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

 


동기&비동기

처리해야 할 작업들을 어떠한'흐름'으로 처리 할 것인가에 대한 관점

즉, 호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐, 관심사

 

Synchronous : 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작

Asynchronous : 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음

 


동기

호출하는 함수 A가 호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태이라면 작업 완료 여부를 스스로 계속 확인하는 것 입니다.

 

비동기

함수 A가 함수 B를 호출할 때 콜백 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다.

함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다.

 

출처 : 출처 : https://deveric.tistory.com/99

여기서 콜백함수란? 보통 이벤트나 어떠한 인터럽트가 발생할때 함수를 호출하는 방식입니다.
즉 미리 함수를(C++인 경우 함수 포인터를) OS에 등록을 해놓고 어떠한 이벤트가 발생이되면 그 함수를 바로 실행하여 값을 받는 형식입니다.

EX) 핸드폰으로 게임을 하다가 전화가 오면 전화화면이 실행되는것

출처 : https://engineer-rew.tistory.com/2


블로킹 & 논블로킹

처리되어야 하는 작업이, 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점

즉 제어권이 누구한테 있느냐가 관심사


블로킹

A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다.

출처 : 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

1 . A 함수가 B 함수를 호출하면 B에게 제어권을 넘김

2. 제어권을 넘겨받은 B는 열심히 함수를 실행, A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춤

3. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려줌


논블로킹

A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있다.

 

출처 : 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

1. A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.

2. A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행

 


동기 & 비동기 + 블로킹 & 논블로킹 조합

동기 비동기 + 블로킹 논블로킹을 조합을 할수가 있습니다.


1. 동기 + 블로킹

출처 : 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

1. 함수 A는 함수 B의 리턴값을 필요시한다(동기)

2. 제어권을 함수 B에게 넘겨준뒤 기다린다(블로킹)


2. 동기 + 논블로킹

하지만 동기를 논블로킹 할경우 이렇게 표현 가능

출처 : 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

1. A함수는 B함수를 호출 이떄 제어권을 주지않음(논블로킹)

2. 하지만 A함수는 B함수의 리턴값이 필요, 중간중간 마다 B함수에게 완료됬는지 물어봄(동기)

3. 즉 논블로킹인 동시 동기


3. 비동기 + 블로킹

사실 마주하기 쉽지않음

출처 : 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

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

2. B함수의 작업에 관심없는데도 A 함수는 B 함수에게 제어권을 넘김(블로킹)

3. 따라서 A 함수는 자신과 관련 없는 B 함수의 작업이 끝날 때까지 기다려야 한다.


4. 비동기 + 논블로킹

 

1. A 함수는 B 함수 호출 이 때 제어권을 B에 주지않고 자신이 가짐(논블로킹)

2. 따라서 계속 자신의 함수를 실행

3. 그리고 B 함수를 호출할 때 콜백함수를 함께 줌 B함수는 자신의 작업이 끝나면 A 함수가 준 콜백함수를 실행(동기)

'개발자 면접 공부 > 운영체제,CS' 카테고리의 다른 글

리틀 엔디안 vs 빅 엔디안  (0) 2022.09.09
쓰레드 풀링, 메모리 풀링  (0) 2022.08.23
Stack OverFlow란?  (0) 2022.07.26
CS,OS 단편화  (0) 2022.07.26
페이징과 세그먼테이션  (0) 2022.07.25