동기와 비동기의 개념
동기(Synchronous)
동기란? 작업이 순차적으로 일어난다는 뜻입니다.
즉, 동기의 핵심은 한 작업이 시작되면 해당 작업이 완료될 때 까지 다음 작업을 하지 못하고 기다려야 합니다.
동기가 동시에 일어난다는 뜻이기 때문에 요청과 해당 요청에 대한 결과가 동시에 일어난다고 생각할 수 있습니다
비동기(Asynchronous)
비동기 란? 작업이 독립적으로 동시에 실행될 수 있다는 뜻입니다. 즉, 요청에 대한 결과를 받기 전에 다음 작업을 시작할 수 있습니다.
비동기 는 요청과 해당 요청에 대한 결과가 동시에 일어나지 않는다고 생각할 수 있습니다.
그림으로 보는 동기와 비동기

- 동기의 경우 순차적으로 각각의 Task가 끝난 후 , 다음 Task가 실행되는 반면에, 비동기의 경우는 각각의 Task가 독립적으로 실행되며, 다른 Task가 끝나지 않아도 실행 될 수 있습니다.
동기와 비동기의 장.단점
동기(Synchronous)
장점
- 설계가 간단하고 직관적입니다.
- 코드의 진행이 순차적이기 때문에 코드의 흐름을 이해하기 쉽습니다.
단점
- 하나의 작업이 완료될 때까지 다른 작업들이 대기해야 하므로 자원 활용이 비효율적입니다.
비동기(Asynchronous)
장점
- 여러 작업이 동시에 독립적으로 진행될 수 있어서 자원을 효율적으로 활용할 수 있습니다.
단점
블로킹과 논블로킹
동기와 비동기를 공부하면서 계속해서 나왔던 블로킹과 논블록킹에 대해서도 정리해보려고 합니다.
동기 / 비동기가 작업에 대한 완료여부의 관점이였다면, 블로킹 / 논블로킹은 현재의 작업이 block(차단 / 대기)되느냐의 여부의 관점이라고 이해했습니다.
사실 아직 동기 / 비동기 그리고 블로킹 / 논블로킹에 대해서 확실하게 차이점을 판단을 하진 못하겠다..
블로킹 + 동기

- 다른 작업이 처리되는 동안 자신의 작업은 처리하지않고 다른 작업의 완료 여부를 받아 순차적으로 처리하는 방식
블로킹 + 비동기

- 블로킹 + 비동기 형태는 잘 마주치기 않는다고한다..
- 동기 + 블로킹 형태와 차이가 없어 보인다.. 그래서 해당 방식은 안티패턴으로 치부하기도 한다.
논블로킹 + 동기

- 다른 작업이 처리되는 동안 자신의 작업도 처리하기 때문에 논블로킹이지만, 다른 작업의 결과가 필요하기 때문에 계속해서 다른 작업의 완료여부를 물어본다.
논블로킹 + 비동기

- B작업(다른 작업)이 처리되는 동안 A작업(자신의 작업)을 처리하고 B작업이 끝나면 Callback을 실행한다.
💡 아직 뭔가 블로킹과 논블로킹 그리고 동기와 비동기의 차이에 대해서 확실하게 파악하지 못한거 같다..
공부를 해보니 비슷한듯 하지만 어딘가는 다른 개념인거 같은데.. 흠.. 그 어딘가를 아직 잘…
비동기 작업의 동기화 처리