상세 컨텐츠

본문 제목

동기/비동기, 블록/논-블록

ETC

by jeonghojin 2022. 5. 27. 16:19

본문

동기(Synchronous) / 비동기(Asynchoronous)

  • 동기/비동기는 프로세스의 작업 순서 보장(먼저 요청한 작업의 응답 확인 후 다른 요청)에 대한 개념
  • 호출한 대상 A가 호출된 대상 B의 작업 완료 상태를 확인하는지에 따라 작업순서를 보장하는가가 관심사이다.
동기 - 현재 작업의 응답이 끝나는 시간과 맞춰 동시에 다음 작업을 요청한다.
- 함수를 호출한 곳에서 호출된 함수가 결과를  반환할 때까지 대기한다.
- 작업 완료 여부를 계속해서 확인한다.
비동기 - 현재 작업의 응답이 긑나지 않은 상태에서 다음 작업을 요청한다.
- 함수를 호출한 곳에서 완료 여부를 신경쓰지 않고, 호출된 곳에서 작업이 끝나면 callback으로 결과를 전달
- 작업 완료 여부를 확인하지 않는다.

* 콜백함수 : 비동기 프로그래밍을 신현하는 기본적인 방법으로, 특정 함수의 작업이 진행되는 동안 다른 작업을 하다가 특정 함수의 작업이 끝나면 콜백함수를 실행해 호출한 곳으로 결과를 전달한다.

 

예시)

동기 - 블록과 유사하다. 하지만 차이점은 결과를 확인한다는 것이다.
- 블록의 경우에는 함수의 결과가 나왔는지 확인하지 않는 반면, 동기의 경우에는 확인을 한다.
- 즉, 호출된 함수의 수행 결과 및 종료를 호출된 함수 뿐 아니라 호출한 함수도 함께 신경쓰면 동기이다.
비동기 - 우리가 흔히 알고 있는 멀티스레드의 경우가 바로 비동기이다.
- 결과 확인과 무관하게 계속 진행된다.
- 동시성 문제를 해결해야한다.
즉, 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경쓰고 처리하면 비동기이다.

 

 

블록(Block) / 논-블록(Non-Block)

  • 블록/논블록은 프로세스 유휴상태(제어권)에 대한 개념.
  • 호출된 대상(함수)이 제어권을 바로 반환하느냐 갖고 있느냐가 관심사이다.
  • A라는 함수를 실행했을 때, A 라는 함수의 모든 행위가 끝날 때까지 기다렸다가 다른 함수가 실행되면 이것은 블록킹되었다고 한다.
  • A라는 함수를 실행했을 때, A라는 함수의 로직이 끝나기 전에 B 라는 함수가 실행된다면 이것은 논블록킹 되었다고 한다.
  • 예시
블록 - 함수 A와 함수 B가 있고, 순서가 A -> B라고 가정하자.
- 함수 B는 함수 A가 끝날 때까지 호출되지 못한다.
즉, 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 return 하지 않으면 블럭이다.
논-블록 - 함수 A, B, C가 있고, 순서가 A -> B -> C라고 가정하자.
- 메인함수가 함수 A를 호출한다. 그러면 호출된 함수A는 실행되고 바로 리턴하면서 함수 B가 실행된다.
- 여기서 리턴은 함수 A의 로직이 모두 끝난 후가 아닌, 시작하자마자 리턴한다는 의미이다.
즉, 호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 바로 return하여 호출한 함수가 다른 일을 진행할 수 있도록 하면 논블럭이다.

 

 

  • 동기 / 비동기 & 블록 / 논블록의 예시는 다음 링크 참고.

https://bentist.tistory.com/55

 


참고

더보기

 

 

관련글 더보기