본문 바로가기
Computer Science/운영체제

Sync vs Async & Block vs Non-Block

by eunnnn 2023. 3. 19.

동기(Synchronous) vs 비동기(Asynchronous)

동기와 비동기는 프로세스의 수행 순서 보장에 대한 매커니즘이다. 즉 처리해야 하는 작업들을 어떠한 흐름으로 처리할 것이냐에 대한 관점이다.

 

동기는 요청과 그 결과가 동시에 일어나는 것을 말한다. 즉 요청을 하면 시간이 얼마나 걸리던지 요청한 결과가 주어질 때 까지 계속해서 기다리게 된다.

그래서 I/O 작업 요청 상황에서도 하나의 System call이 끝날때까지 기다려서 그 결과물을 가져온다.

 

반대로 비동기는 요청과 결과가 동시에 일어나지 않는 것을 말한다. 하나의 요청에 대한 응답을 즉시 처리하지 않아도, 그 대기시간 동안 다른 요청에 대한 처리가 가능한 방식이다.

system call이 완료되지 않아도 기다리지 않고, 작업이 완료가 될 때 결과물을 가져온다

 

각각 장점과 단점을 정리해보면,

  장점 단점
동기 설계가 매우 간단하고 직관적이다 결과가 주어질 때까지 대기해야 한다.
비동기 요청에 따른 결과가 반환되는 시간동안 다른 작업을 수행할 수 있다. (단위시간 당 많은 작업을 처리할 수 있음) 동기식보다 설계가 복잡하다.
CPU나 메모리를 많이 사용하는 작업을 비동기로 처리하게 되면 과부하가 걸릴 수 있다.

Blocking vs Non-Blocking

블로킹과 논블로킹은 처리되어야 하는 작업이 전체적인 작업 흐름을 막는 지에 대한 관점이다.

 

블로킹(Blocking)은 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 자신의 작업을 멈추고 해당 작업을 기다렸다가 다시 자신의 작업을 시작한다. 다른 함수를 호출할 때, 제어권도 아예 함께 넘겨주고 그 작업이 끝난 후에야 돌려받기 때문이다.

논 블로킹(Non-Blocking)은 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것을 의미한다.

다른 함수를 호출할 때, 제어권을 넘겨주기는 하지만 바로 돌려받고, 제어권을 돌려받은 호출자는 바로 다른 작업을 수행할 수 있다.


Sync vs Async & Block vs Non-Block

sync, async / block, non-block은 관점의 차이가 있다.

sync, async 는 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나는지에 관한 관점을 확인하,

block, non-block은 호출된 함수가 바로 제어권을 넘겨주는가에 관한 관점을 확인한다는 것에서 차이가 있다.

 

그리고 이들은 섞여서 총 네가지의 조합을 만들 수 있다.

1) Sync-Blocking

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

 

2) Sync-Nonblocking

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

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

 

3) Async-blocking

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

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

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

 

4) Async-Nonblocking

A 함수는 B 함수를 호출할 때, 제어권을 B 함수에 주지 않고, 자신이 계속 가지고 있는다(논블로킹). 따라서 B 함수를 호출한 이후에도 멈추지 않고 자신의 코드를 계속 실행한다.

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

 

 

더보기

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://simsim231.tistory.com/132

 

[OS] 동기와 비동기

[OS] 동기와 비동기 동기는 어떤 일이 끝난 후에 다음일을 하는 것, 비동기는 어떤 일이 끝나지 않더라도 다음 일을 수행할 수 있는 것이다. Blocking & None-Blocking 동기 & 비동기를 살펴보기 전에 block

simsim231.tistory.com

https://velog.io/@soyeon207/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0-blocking-non-blocking

 

[OS] 동기 / 비동기, blocking / non-blocking

개발을 하다보면 동기, 비동기라는 말에 대해서 많이 듣게 된다.하지만 들을 떄마다 그게 뭐더라 ... 하고 개념을 혼동하거나 헷갈릴 때가 진짜 너무너무 많다. 그래서 알아보기로 했다.

velog.io

https://ssungkang.tistory.com/entry/OS-%EB%8F%99%EA%B8%B0-vs-%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9-vs-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9

 

[OS] 동기 vs 비동기, 블로킹 vs 논블로킹

이번 포스팅에서는 동기와 비동기, 블로킹과 논블로킹에 대해서 알아보도록 하겠습니다. 네 단어 모두 익숙하지만 명확하게 설명할 수 없고 이해가 부족하다는 생각이 들어서 정리해보았습니

ssungkang.tistory.com

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

'Computer Science > 운영체제' 카테고리의 다른 글

프로세스/스레드 동기화  (0) 2023.03.19
쓰레드 세이프(Tread Safe)  (0) 2023.03.19
캐시 메모리  (0) 2023.03.18
가상 메모리(Virtual Memory)  (0) 2023.03.18
교착상태와 기아상태  (1) 2023.03.18