동기와 비동기, 블록킹과 논블록킹에 대해..

마이구미·2021년 10월 26일
0

공부하다 보면 동기와 비동기, 블록킹과 논블록킹을 접하게 되고 무심결에 '어.. 이거 뭐가 달라... 같은거 아냐?' 라는 생각이 들었다. 그래서 저 친구들이 무엇이고 무엇이 다른지 찾아보았다.

그럼 뭐가 달라?

먼저, 동기와 비동기에 대해 알아보자.
동기 작업이란 작업을 수행하는 두 개 이상의 주체가 서로 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작할 때를 의미한다. 시작과 종료를 동시에 하거나, 하나의 작업이 끝나는 동시에 다른 주체가 작업을 시작하면 이는 동기 작업이라고 볼 수 있다.
비동기 작업은 두 주체가 서로의 시작, 종료시간과는 관계 없이 별도의 수행 시작/종료시간을 가지고 있을 때를 뜻한다. 서로 다른 주체가 하는 작업이 자신의 작업 시작, 종료시간과는 관계가 없을 때 비동기라고 부를 수 있다.
즉, 처리해야 할 작업들을 어떠한 '흐름'으로 처리할 것인가에 대한 관점으로 볼 수 있다.

다음으로 블록킹과 논블록킹이다.
블로킹과 논블로킹은 다른 작업을 수행하는 주체를 어떻게 상대하는지가 중요하다. 자신의 작업을 하다가 다른 작업 주체가 하는 작업의 시작부터 끝까지 기다렸다가 다시 자신의 작업을 시작한다면 이는 블로킹이고, 다른 주체의 작업과 관계없이 자신의 작업을 계속한다면 이를 논블로킹이다.
즉, 처리되어야 하는 작업이 전체적인 작업 '흐름'을 막는지 안막는지에 대한 관점으로 볼 수 있다.

조합해보자!

동기 블록킹

이는 직관적으로 이해할 수 있다.

동기 논블록킹

동기, 논블로킹 조합도 비동기, 블로킹 조합처럼 작업 효율이 좋지 않다. 논블로킹으로 자신의 작업을 계속하고 있지만 다른 작업과의 동기를 위해 계속해서 다른 작업이 끝났는지 조회한다.

비동기 블록킹

비동기, 블로킹 조합은 결국 다른 작업이 끝날 때를 기다려야 하기 때문에 동기, 블로킹과 비슷한 작업 효율이 나온다. 즉 효율이 좋지 못하다.

비동기 논블록킹

비동기, 논블로킹 조합은 자원이 충분하다면 효율이 좋은 조합이다. 자신의 작업이 멈추지도 않고, 다른 주체가 하는 작업의 결과가 나왔을 때 콜백을 설정하기도 한다. 다른 주체에게 작업을 맡겨놓고 자신이 하던 일을 계속할 수 있기 때문에 해야 할 작업이 대규모이고, 동기가 필요하지 않을 때 효과적이다.

  • 대규모 사용자에게 푸시메세지 전송
  • 다양한 외부 API를 한번에 호출할 때

출처 및 참고

https://deveric.tistory.com/99
https://siyoon210.tistory.com/147

profile
마이구미 마시쪙

0개의 댓글