[dev] 싱크, 어싱크, 블로킹, 논블로킹을 정확하게 모르는 사람을 위한 글

블로킹 논블로킹

싱크, 어싱크, 블로킹, 논블로킹을 정확하게 모르는 사람은 바로 저 입니다.


Synchronous VS Asynchronous
한국어로 동기와 비동기입니다.

동기는 2개의 작업이 있을 때, 첫 번째 작업의 종료시점과 두 번째 작업의 시작시점이 닿아있으면 sync 입니다.
보통 함수를 연달아 호출했을 때 순차적으로 출력이 된다면 Synchronous한 작업입니다.

비동기는 동기와 반대로 작업의 시간을 맞추지 않는 것 이죠.

blocking VS non-blocking
기술 적으로 구분이 되며 함수의 호출을 생각하면 이해가 빠르기 때문에 함수호출로 설명하겠습니다.
볼로킹은 어떤 함수가 호출되고 작업이 끝날 때까지 반환값을 넘겨주지 않는 것을 블로킹 되었다고합니다.
논블로킹은 어떤 함수가 호출되고 작업이 요청된다음 반환값을 넘겨주면 논 블로킹 되었고합니다.

블로킹/동기, 블로킹/비동기, 논블로킹/동기, 논블로킹/비동기
이렇게 4개의 조합이 있을 수 있습니다. 언제쓰이고 어떻게 써야하는지 정리해보겠습니다.

블로킹/동기

예를 들어보겠습니다.

  • 카페에서 손님이 줄을 서 있습니다. 1번, 2번, 3번.
  • 캐셔가 주문을 받습니다.
  • 1번손님 아메리카노 4잔.
  • 캐셔가 주문을 받고 커피를 내립니다.
  • 1번손님을 포함한 모든 손님은 기다립니다.(블로킹상태)
  • 캐셔는 작업이 완료되면 1번손님에게 커피를 전달합니다.
  • 1번 손님은 커피를 받아 카페에서 일을 시작합니다.(동기)
  • 2번손님, 3번손님 순서대로 주문을 받아 전달을 합니다.
  • 2번, 3번은 1번의 음료를 만들 때 아무것도 하지 못하고 기다리고 있습니다.
  • 음료는 순서대로 나옵니다.

블로킹/비동기

예를 들어보겠습니다.

  • 카페에서 손님이 줄을 서 있습니다. 1번, 2번, 3번.
  • 캐셔(B작업)가 주문을 받습니다.
  • 1번손님(A작업) 아메리카노 4잔.
  • 캐서는 1번손님에게 자리에 앉아 일하고 계시면 불러주겠다고 합니다.
  • 1번손님은 일을 시작한 상태가 되어버립니다.(비동기)
  • 하지만 1번손님은 자리에 가서 아무것도 안하고 커피가 나오기만을 기다리고 있습니다.(블로킹)
  • 캐셔는 작업이 완료되면 1번손님에게 커피를 전달합니다.
  • 캐셔는 다시 2번손님에게 가서 주문을 받고, 1번손님은 카페에서 일을 합니다.

논블로킹/동기

예를 들어보겠습니다.

  • 카페에서 손님이 줄을 서 있습니다. 1번, 2번, 3번.
  • 캐셔가 주문을 받습니다.
  • 1번손님 아메리카노 4잔.
  • 캐서는 1번손님에게 자리에 앉아 일하고 계시면 불러주겠다고 합니다.
  • 1번손님은 일을 시작합니다.(논블로킹)
  • 1번손님은 일을 하면서 계속 커피가 다 되었는지 확인합니다.
  • 커피가 완성된 것을 확인한 1번 손님이 바로 가져갑니다.(동기)



논블로킹/비동기

예를 들어보겠습니다.

  • 카페에서 손님이 줄을 서 있습니다. 1번, 2번, 3번.
  • 캐셔가 주문을 받습니다.
  • 1번손님 아메리카노 4잔.
  • 1번손님은 자리에가서 메일을 보냅니다.
  • 캐셔가 커피를 가져다 놓습니다.
  • 1번손님은 아직 자신의 일에 열중합니다.
  • 그 사이에 2번손님이 주문을 받고 커피를 갖다 놓습니다.
  • 2번손님은 커피를 가져갑니다.
  • 1번손님은 메일을 다 보내고 커피를 가지고 옵니다.


정리

동기, 비동기, 블로킹, 논블로킹의 개념에 대해 정리 해 보았습니다. 시간이 된다면 swift 코드로 예제를 만들어 실행해 보고 추가하겠습니다.

donaricano-btn

댓글

이 블로그의 인기 게시물

[IOS] AppDelegate는 뭐하는 녀석이지?

[git] git의 upstream과 origin 헷갈리는 사람 손!

[git] Github 이슈 라벨(issue labels)