동기 (Synchronous)
동기는 서버에서 요청을 보냈을 때 응답이 돌아와야 다음 동작을 수행하는 직렬적인 일처리를 말한다.
예를들어, A작업이 모두 진행될 때까지 B작업은 대기 상태에 있는다.
동기는 설계가 간단하고 직관적이라는 장점이 있는 반면,
응답이 올 때까지 대기해야 하므로 비효율적이라는 단점이 있다.
비동기 (Asynchronous)
비동기는 서버에서 요청을 보냈을 때 응답상태와 관련 없이 다음 동작을 수행하는 병렬적인 일처리를 말한다.
예를들어, A작업에 대한 요청을 보냄과 동시에 B작업을 실행한다.
A작업은 결과값이 나오는 대로 출력한다.
비동기는 동기에 비해 복잡하고 결과가 주어지는 데까지 시간이 걸리지만,
그 시간 동안 다른 작업을 할 수 있으므로 효율적으로 자원을 사용할 수 있다는 장점이 있다.
블록 (Block) 과 논블록 (Non-block)
블록과 논블록은 작업을 요청했을 때 나머지 작업에 대한 제어권의 여부에 따라 달라진다.
즉, 작업 요청 시 다른 작업을 수행할 제어권이 주어졌냐 주어지지 않았냐의 차이다.
블록 (Synchronous)
호출된 함수가 자신의 할 일을 모두 마칠 때까지 제어권을 들고 있는 상태로
호출한 함수에게 돌려주지 않는걸 블록이라고 한다.
논블록(Synchronous)
호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 건네주어
호출한 함수가 다른 일은 진행할 수 있도록 해주면 논블록 이라고 한다.
동기 비동기와 블록 논블록
동기는 블록이고 비동기는 논블록이라고 생각할 수 있겠지만 엄연히 서로 다른 개념이다.
동기 비동기는 '행위' 에 관한 추상적인 것이고 블록 논블록은 '기술' 에 관한 것이다.
그렇기 때문에 동기이면서 논블록인 경우, 비동기이면서 블록인 경우도 존재한다.
블록 && 동기
요청한 작업이 마무리될 때까지 제어권을 받지 않은 채 가만히 기다리는 상태.
학생 : 안녕하세요. 부르셨다고 해서 왔습니다. (도대체 무슨 일이길래 날 부르셨지..?)
교수 : (일 중) 어어. 거기 앉아 기다리게.
학생 : 옙. (하염없이 앉아 기다리는 중..)
교수 : (일 끝) 그래. 자네. 무슨 일로 왔나?
블록 && 비동기
결과에는 관심 없지만 일단 하던 일은 멈춘 상태로 요청한 작업이 마무리 될 때까지 기다리는 상태.
학생 : 안녕하세요. 안부차 들렸습니다.
교수 : (일 중) 어어. 거기 앉아 기다리게.
학생 : 예..? 예. (일단 앉아 기다리는 중..)
(이럴 줄 알았으면 오지 말걸..)
교수 : (일 끝) 그래. 자네. 무슨 일로 왔나?
논블록 && 동기
작업을 요청하고 제어권도 자신에게 있는 상태지만, 요청작업에 대한 결과에 관심이 있어 계속 결과값을 확인하는 상태.
학생 : 안녕하세요. 성적에 관해 여쭙고 싶어서 왔습니다.
교수 : (일 중) 어어. 거기 앉아 차라도 마시고 있게.
학생 : 옙! (홀짝 거리면서 교수님 상태 살피는 중..)
교수 : (일 끝) 그래. 자네. 무슨 일로 왔나?
논블록 && 비동기
다른 작업을 요청하고 제어권도 자신에게 있는 상태로 각각 병렬적으로 작업을 처리하는 상태.
- A학생과 B학생이 카공하러 만난 상태
A학생 : B야. 이거 어려운데 어떻게 풀어?
B학생 : 이거? 문제 좀 볼게. 일단 다른 문제 풀고 있어 봐.
A학생, B학생 : (각자 문제 보는 중)
B학생: 아 이해했어. 이건 말이야...
참고:
https://velog.io/@daybreak/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC
https://80000coding.oopy.io/ed22f6e8-89ea-4164-a86e-a6b92a1f54b4
https://private.tistory.com/24#google_vignette
https://musma.github.io/2019/04/17/blocking-and-synchronous.html
'CS공부' 카테고리의 다른 글
JWT(JSON Web Token) 이란? (0) | 2023.07.24 |
---|---|
쿠키(Cookie)와 세션(Session)의 차이 (0) | 2023.07.21 |
[HTTP] HTTP 메서드 및 상태코드 (0) | 2023.07.14 |
[HTTP] HTTP의 개념 및 진화 (0) | 2023.07.13 |
API (애플리케이션 프로그래밍 인터페이스) 란? (0) | 2023.07.07 |