Blocking/Non-Blocking, Sync/Async

조현근·2022년 11월 23일
0
post-thumbnail

테코톡을 보고 정리한 내용입니다!

Blocking/Non-Blocking

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

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

예를들어 A메서드에서 B메서드를 호출했을때, B메서드가 끝날때까지 A메서드가 기다리는 것을 Blocking이라 하고, B메서드가 끝나지 않더라도 A메서드가 계속 할일을 하는 것을 Non-Blocking이라고 합니다.

다른 주체가 작업할 때 자신의 제어권이 있는지 없는지에 따라 구분할 수 있습니다.

Sync/Async

Synchronous: 끝나는 동시에 시작함을 의미
Asynchronous: 끝나는 동시에 시작을 하지 않음을 의미

A메서드가 B메서드를 호출하고 B의 결과가 A에게 전달되었을때, A가 B의 결과를 바로 처리하면 Sync이고, B의 결과를 바로 처리하지 않으면 Async입니다. B의 일이 끝날때까지 A가 기다려도되고 자기 할일을 해도 됩니다.

Blocking + Sync

대표적으로 Java를 생각할 수 있습니다. 예를들어 Java를 이용해 알고리즘을 풀때 입력을 받게 되는데, 입력이 끝나기 전까지 알고리즘 로직이 수행되지 않습니다. 이를 Blocking + Sync로 볼 수 있습니다.

Blocking + Async

이런 경우는 거의 없습니다. A메서드에서 B메서드를 호출하고 기다리는데 B의 결과를 바로 처리할 수도 있고, 안할수도 있는 방식을 의미하는데 다른 방식으로 충분히 대체될 수 있다고 생각합니다.

Non-Blocking + Sync

A메서드에서 B메서드를 호출 한 후, A메서드는 자기 할 일을 계속하고, 중간중간 B메서드에게 다 끝났는지 물어본 후 B메서드가 다 끝나 결과가 전달되면 바로 그 결과를 처리하는 방식입니다.

Non-Blocking + Async

대표적으로 JavaScript를 생각할 수 있습니다. A메서드에서 B메서드를 호출 한 후 B메서드가 끝날때까지 기다리지 않고 A메서드는 자기 할 일을 하고, B메서드의 결과가 나오더라도 A메서드는 바로 처리하지 않아도 됩니다.

출처

https://www.youtube.com/watch?v=oEIoqGd-Sns
https://www.youtube.com/watch?v=IdpkfygWIMk

profile
안녕하세요!

0개의 댓글