인프런 커뮤니티 질문&답변

가나파이님의 프로필 이미지
가나파이

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Listener

비동기와 논블록은 동일한 의미로 생각하고 넘어가도 되나요?

해결된 질문

작성

·

460

3

어떤 책에서 보면 비동기와 논블록은 다른 것이라고 설명이 되어 있었는데, 엄밀하게 알고 넘어가야하는 개념은 아닌가요? 

답변 2

5

Rookiss님의 프로필 이미지
Rookiss
지식공유자

보통 사용할 때 [블로킹+동기]  vs [논블로킹+비동기]로
짝지어서 사용하는 경우가 많지만
그렇다고 블로킹 <-> 동기가 동일한 의미는 아닙니다.
C# 강의에서는 그 정도로 깊이 들어갈 필요가 없어서
따로 언급을 안 하지만 C++ 강의에서는 해당 내용도 정밀하게 다룹니다.

블로킹 vs 논블로킹은 말 그대로 함수가 '바로' 호출이 완료되는지 여부를 나타내고
동기 vs 비동기는 우리가 요청한 일이 '당장' 실행되는지, '지연되어' 호출될 수 있는지를 의미합니다.
(즉 함수를 호출할 때 입출력이 동시에 실행되느냐? 가 동기/비동기를 구분짓는 핵심입니다)

어떤 사람한테 질문을 해서 답을 듣는데,
전화를 걸어서 답장을 듣는다면 바로 답장을 실시간으로 들을테고
이메일로 보내면 1주일 후에 답장이 올 수도 있겠죠.
따라서 전화 = 동기, 이메일 = 비동기에 비유할 수 있습니다.

반면 블로킹/논블로킹은 말 그대로 함수가 바로 빠져나오는지를 의미합니다.
논블로킹의 경우 무조건 빠져나오고 성공/실패 여부를 판단하는 식으로 구현되고
블로킹은 끝장을 볼때까지 함수가 대기를 타서,
함수가 반환되면 입출력 결과를 바로 확인을 수가 있습니다.

0

가나파이님의 프로필 이미지
가나파이
질문자

답변정말 감사드립니다 ㅎㅎ 정말 많은 도움이 되네요 

가나파이님의 프로필 이미지
가나파이

작성한 질문수

질문하기