동기/비동기, Blocking/NonBlocking

Reading-Snail·2023년 12월 13일
1

💡 Qurious 팽이! 💡

목록 보기
4/14

이 개념들은 여러 개의 함수/메서드가 있는 환경에서 각각의 함수/메서드를가 시행 될 때, 상호 간의 어떤 관계를 가질지에 대한 부분입니다.

Sync vs Async

호출 되는 함수의 작업 완료 여부를 확인 합니다.

Sync

작업이 완료 될 때까지 기다립니다
메서드 A가 메서드 B를 호출 하였을 때, 메서드 A는 B가 완료될 때까지 지속적으로 확인하며 기다립니다. 메서드 B가 완료되면 반환 된 리턴 값을 가져옵니다.

Async

작업이 완료될 떄까지 기다리지 않습니다. 대신 호출을 할 때 콜백 함수도 함께 보냅니다.
메서드 A는 메서드 B에 실행하라는 호출과 함께 콜백을 전송합니다. 메서드 B는 호출 명령을 받아 실행을 완료한 후 마지막으로 콜백 함수를 실행하여 작업을 완료합니다 이때 메서드 A는 메서드 B의 완료 여부를 신경 쓰지 않습니다.

Blocking vs Non-Blocking

이 둘의 개념은 제어권을 어떻게 다루냐에 따라 다르게 정의 됩니다. 즉, 메서드를 호출하는 메서드가 중지 될 지에 대한 내용입니다.

Blocking

메서드A가 메서드B를 호출 할 때 제어권도 함께 넘겨줍니다. 제어권이 없는 메서드A는 다음 로직을 실행시키지 못하고 메서드B가 완료 된 후 제어권을 돌려줄 때까지 기다립니다.

Non-Blocking

함수를 호출 할 때 제어권은 넘겨주지 않습니다. 하여 메서드A가 메서드B를 호출하더라도 메서드A는 계속해서 실행이 되어집니다.

위의 각각의 두 가지의 경우의 수로 인해 총 4가지의 상황이 가능합니다

Sync/Async + # Blocking/Non-Blocking

Sync + Blocking

Sync: 리턴 값 필요
Blocking: 제어권 전달
처음에 제어권을 전달하여 메서드A는 메서드B과 완료될 때까지 기다립니다. 메서드B의 실행이 완료되면 리턴 값과 제어권을 함께 반환하게 되고, 제어권을 받은 메서드A도 남은 코드를 실행하게 됩니다.

Sync + Non-Blocking

Sync: 리턴 값 필요
Non-Blocking: 제어권 전달하지 않음
제어권이 전달되지 않았으므로 메서드A는 계속해서 실행합니다. 대신 리턴 값을 필요로 하기 때문에 주기적으로 메서드B에게 리턴값을 요구하게 됩니다.

Async + Non-Blocking

Async: 리턴 값 필요 없음
Non-Blocking: 제어권 전달햐지 않음
제어권을 전달하지 않았으며 메서드B에서 반환하는 리턴 값도 필요로 하지 않기 때문에 메서드A와 메서드B는 독립적으로 실행 됩니다.

Async + Blocking

Async: 리턴 값 필요 없음
Blocking: 제어권 전달
제어권을 전달하여 메서드B가 완료될 때까지 기다리게 되지만, 그에 따르는 리턴 값과 같은 보상이 없습니다. 성능적으로 sync-blocking와 비교하여 이점이 없어 잘 사용되지 않습니다.

참조:
https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

profile
책읽는 달팽이 || 공학도에서 개발자로! || 결국 과거의 흐름을 이해했을 때 지금의 것들을 통찰력있게 바라볼 수 있다고 믿습니다.

0개의 댓글

관련 채용 정보