추가적인 Blocking / Non-Blocking의 개념에 대해서

안녕하세요! 앨런입니다.

제가 짧게 강의를 만들어 보았었는데, 많은 도움 되셨었나 모르겠네요! 그래도 도움이 많이 되었다고 좋은 수강평들을 남겨주신 분들이 많아서, 수업을 만들어 보길 잘했다고 많이 느끼고 있습니다. ^^

다름이 아니오라, 가끔씩 동기 비동기 개념이외에,

Blocking / Non-Blocking의 개념은 뭔가요? 이런 질문들이 올라와서.. 혹시나 참고해 보실 분들이 있으시다면, 도움이 될 것 같아 내용을 남겨드립니다.

제가 수업 내용을 통해서 말씀드린 동기 / 비동기 개념을 먼저 익히시는 것이 당연히 우선이라고 생각이 들고요. 언어에 따라서는 Blocking / Non-Blocking 개념이 쓰이지 않는 언어들도 있기 때문에, 이 부분들은 공부하시는 언어에 해당 내용이 존재하는 개념인지를 먼저 살펴 보셔야 할 것 같습니다. ^^

네, 어쨌든 Blocking / Non-Blocking 개념이 쓰이는 언어라면 아래 내용을 참고해 보시면 좋을 것 같고요,


▶︎ Blocking / Non-Blocking
은 호출되는 함수가 바로 리턴하느냐 마느냐가 중요한 개념

  1) Blocking - 즉시 리턴하지 않음 (일을 못하게 막음)

  2) Non-Blocking - 즉시 리턴



▶︎ 동기 / 비동기는 작업완료여부를 호출한 함수가 신경쓸 것인지, 호출된 함수(callback)가 신경쓸 것인지

  1) 동기 - 호출한 함수가 작업완료 신경씀

  2) 비동기 - 호출된 함수(callback함수)가 작업완료 신경씀


( 다만 이런 개념이 합쳐서 Blocking & Async는 어차피 다른 일을 못하니 일부러 사용하는 경우는 없다고 합니다.)



그리고 일반적으로  Blocking / Non-Blocking 개념이 쓰이지 않는 언어들에서는 제가 수업에서 말씀드린 것처럼


동기는 Blocking과 결합된 개념으로, 비동기는 Non-Blocking과 결합된 개념으로 생각하시면 편합니다.

그리고 혹시 다른 분이 글로 아주 잘 써놓으신 자료가 있어 링크도 달아드립니다.^^

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

https://siyoon210.tistory.com/147


고맙습니다. :)

황진성 프로필
황진성 2020.10.21 안녕하세요. https://siyoon210.tistory.com/147 이 블로그의 설명이 본문의 설명과 모순되는 점들이 좀 있는데요. 한번 살펴보시고, 검증해주실 수 있으실까요? 특히 블로그의 시나리오 2 (Sync + Non Blocking)에서 사원 1의 일이 끝날 때 까지 팀장이 다른 일을 할 수 없다고 했는데, 앨런님이 써주신 본문에서는 표시된 바로는 다른 일을 할 수 있는 것으로 보입니다. 제 생각으로는 시나리오 2에서 사원1, 사원2, 사원3에게 한꺼번에 일을 시킨 후 팀장은 또 다른 일을 하면서 주기적으로 사원 1, 사원 2, 사원 3의 일이 다 끝났는지 확인을 하면 된다고 생각합니다.
채널톡 아이콘