카테고리 없음

Blocking/Non-Blocking , Sync/Asyn

푸라멘 2024. 4. 1. 01:12

 

Blocking vs Non-Blocking

  • Blocking : 요청한 작업이 끝날 때 까지 기다렸다가 작업이 끝나면 자신의 일을 시작하는것

Blocking

        1. B 함수를 호출하면서 제어권을 B함수에 넘긴다.

        2. A 함수는 제어권이 없어 B 함수가 끝날 때까지 기다린다.

        3. B 함수가 완료되면서 제어권을 A함수에게 돌려준다.

        4. A 함수는 제어권을 얻어 다음 코드를 진행한다.

 

  • Non-Blocking : 요청한 작업의 상관없이 진행하던 일을 계속 진행하는 것

Non-Blocking

         1. B 함수를 호출하지만 제어권은 넘겨주지 않는다.

         2. B 함수는 B대로 실행, A함수도 다음 코드를 실행한다.

 

즉, 제어권이란 작업의 흐름진행을 누가 제어하고 있는가를 의미하며, 제어권의 소유 여부가 Blocking과 Non-Blocking을 구분짓는 요소이다.

 

Sync vs Async

  • Synchronous : 요청한 작업에 대하여 순서가 지켜지는 것 (결과에 관심이 있음

Synchronous

 

Task 1, 2, 3이 있을 때 1, 2, 3을 순서대로 실행시키면C  Task 1이 끝나고 Task 2 실행,  Task 2 가 끝나고 Task 3 실행의 형식을 나타낸다.

Task 2가 실행되기 위해서는 Task 1의 종료시점을 알아야하고, Task 3가 실행되기 위해서는 Task 2의 종료 시점을 알아야 하기에 Synchronous는 호출한 함수의 결과에 관심이 있고 결과를 받으면 바로 처리한다.

Synchronous

 

A가 B를 호출하여 B의 결과를 기다리고, B는 C를 호출하여 C의 결과를 기다린다.

C가 결과를 리턴하면 B는 남은 작업을 마무리하고 결과를 도출해 다시 A에게 리턴하여 Synchronous 하다.

 

  • Asynchronous : 요청한 작업에 대하여 순서가 지켜지지 않아도 되는 것 (결과에 관심이 없음)

Asynchronous

 

Task 1이 먼저시작하고 이어서 Task 2와 Task 3이 동시에 시작했지만 끝나는 순서는 Task 3, Task 1, Task 2 순서이다.

실행 순서에 따라 Task가 끝나지 않으므로 서로의 종료시점을 몰라도 상관없다.

 

Asynchronous

 

A 에서 B를 호출하지만 A는 계속해서 진행되고 있고 B 에서 C를 호출하지만 C의 결과를 받지 않고도 계속 진행된다

 

 

 

Blocking / Non-Blocking & Sync / Async 조합

1. Blocking / Sync 조합

Blocking이라서 제어권이 넘어가 B 함수가 끝나기 전까지 기다리다가 Synchronous라서 결과를 리턴받고 순서대로 바로 실행한다.

 

사용예시

-  JAVA의 Scanner 입력

- 다음 과정을 진행하기 위해 사용자의 입력이 필요한 경우 

 

2. Non-Blocking / Sync 조합

Non-Blocking이라서 제어권이 넘어가지 않은 A  함수는 요청한 B 함수가  끝날 때까지 결과를 확인하면서 기다리고 결과를 리턴 받으면 Synchronous라서 순서대로 바로 실행한다.

 

사용예시

-  게임 로딩 화면

 

 

3. Blocking / Async 조합

A 함수는 제어권을  B함수에 넘겨주어 B 함수가 결과를 돌려줄 때까지 멈춘다.

B 함수가 제어권을 돌려주면 받은 콜백함수나, 다른 코드를 실행 

 

사용예시

-  결과에 관심이 없는데 결과를 받을 때까지 아무것도 못하는 이상한 구조로 사용되는 경우가 드뭄

 

4. Non-Blocking / Async 조합

A 함수가 B 함수 호출 후에도 제어권을 가지고 있으므로 다음 코드를 진행한다. B는 진행하다 함수가 완료되면 넘겨받은 콜백함수를 실행하여 완료 로직을 실행한다.

 

 

사용예시

-  웹 브라우저 파일 다운로드