Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Swift] Blocking vs Non-Blocking #4

Closed
seungchan2 opened this issue Apr 29, 2022 · 1 comment
Closed

[Swift] Blocking vs Non-Blocking #4

seungchan2 opened this issue Apr 29, 2022 · 1 comment
Assignees
Labels

Comments

@seungchan2
Copy link
Owner

seungchan2 commented Apr 29, 2022

Blocking

자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것

Blocking 예시

사원이 Blocking 상사에게 문서를 제출했다.

그 때 Blocking 상사는 사원에게 자리에 돌아가지 말고 자신이 해당 문서를 다 읽을 때까지 기다리라고 한다.

사원은 Blocking 상사가 문서를 다 읽을 때까지 기다려야 한다.

사원에게 제어권을 바로 반환하지 않으므로 되게 비효율적인 방법이다.

Non-Blocking

다른 주체의 작업에 관련없이 자신의 작업을 하는 것

Non-Blocking 예시

사원이 Non-Blocking 상사에게 문서를 제출했다.

그 때 Non-Blocking 상사는 사원에게 자리에 돌아가서 볼일을 보라고 한다.

사원은 자리에 돌아가 다른 할 일을 할 수 있게 된다.

사원에게 제어권을 반환해서 효율적인 처리를 할 수 있다.

Synchronous

동기라는 뜻을 가진다. 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작을 의미한다.

Synchronous 예시

사원이 Synchronous 상사에게 문서를 제출했다.

사원은 일이 너무 하고 싶어서 Synchronous 상사가 확인하자마자 문서를 처리한다.

Asynchronous

비동기라는 뜻을 가진다. 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미한다.

Asynchronous 예시

사원이 Asynchronous 상사에게 문서를 제출했다.

Asynchronous 상사가 해당 문서를 확인했지만 사원은 내용을 확인하고 당장 처리하지 않고 나중에 처리한다.

4가지 조합

Blocking Non-Blocking
Sync Blocking / Sync Non-Blocking / Sync
Async Blocking / Async Non-Blocking / Async

1. Blocking / Sync

사원이 Blocking Sync 상사에게 문서를 제출했다.

Blocking Sync 상사는 자신이 해당 문서를 다 읽을 때까지 사원에게 기다리라고 한다. (Blocking 개념)

다 읽고 해당 결과를 사원이 해당 업무를 바로 처리한다. (Sync 개념)

2. Non-Blocking / Sync

사원이 Non-Blocking Sync 상사에게 문서를 제출했다.

Non-Blocking Sync 상사는 문서를 받은 후 직원에게 다른 일을 보라고 한다. (Non-Blocking 개념)

하지만 사원은 Blocking Sync 상사에게 너무 시달린 나머지 중간 중간 계속 다 읽었냐고 Non-Blocking Sync 상사에게 계속해서 질문을 한다.

Non-Blocking Sync 상사가 다 읽으면 바로 사원은 해당 문서를 처리한다. (Sync 개념)

3. Blocking / Async

  • Blocking / Sync 와는 별 차이가 없다.
  • 이점이 거의 없다.

사원이 Blocking Async 상사에게 문서를 제출했다.

Blocking Async 상사는 아무 이유없이 사원을 옆에 두고 기다리라고 한다. (Blocking 개념)

사원은 결과에 큰 관심이 없지만 기다려야 한다.

Blocking Async 상사는 문서를 다 읽고 메일로 보내줄테니 돌아가라고 한다.

사원은 메일로 받은 문서를 시간이 될 때 처리한다. (Async 개념)

4. Non-Blocking / Async

사원이 Non-Blocking Async 상사에게 문서를 제출했다.

Non-Blocking Async 상사는 사원에게 돌아가서 다른 일을 하라고 하고 서류를 읽고 메일로 보낸다. (Non-Blocking 개념)

사원은 나중에 메일을 확인하고 처리한다. (Async 개념)

결론

Blocking과 Non-Blocking의 가장 큰 차이는 제어권이고, Sync와 Async의 가장 큰 차이는 순서와 결과이다.

Swift는 동기는 Blocking 개념, 비동기는 Non-Blocking 개념으로 사용한다.

호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 일을 할 수 있는 기회를 줄 수 있으면 NonBlocking

그렇지 않고 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만든다면 Blocking

@seungchan2 seungchan2 self-assigned this Apr 29, 2022
@seungchan2 seungchan2 changed the title [Swift] 순환 참조를 확인하는 방법 [Swift] Blocking vs Non-Blocking May 2, 2022
@seondal
Copy link

seondal commented May 3, 2022

상사와 사원에 비유한 표현이 인상적입니다..
이해가 훨씬 쉬운것 같아요 👍 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants