안녕하세요! 앨런입니다.
제가 짧게 강의를 만들어 보았었는데, 많은 도움 되셨었나 모르겠네요! 그래도 도움이 많이 되었다고 좋은 수강평들을 남겨주신 분들이 많아서, 수업을 만들어 보길 잘했다고 많이 느끼고 있습니다. ^^
다름이 아니오라, 가끔씩 동기 비동기 개념이외에,
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
고맙습니다. :)