728x90
목차
- 동기 (Synchronous) & 비동기 (Asynchronous)
1-1. 동기 (Synchronous)
1-2. 비동기 (Asynchronous)
- 블로킹 (Blocking) & 논블로킹 (Non-Blocking)
2-1. 블로킹 (Blocking)
2-2. 논블로킹 (Non-Blocking)
- 동기&비동기 + 블로킹&논블로킹 비교
3-1. Sync & Blocking
3-2. Sync & Non-Blocking
3-3. Async & Non-Blocking
3-4. Async & Blocking
- 결론
1. 동기 (Synchronous) & 비동기 (Asynchronous)
- 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 판단할 수 있다.
1. 동기 (Synchronous)
- 현재 작업의 응답과 다음 작업의 요청의 타이밍을 동시에 맞추는 것
- 요청한 순서를 가지고 진행된다는 것
2. 비동기 (Asynchronous)
- 요청한 그 자리에서 결과를 주어지지 않음
- 작업을 지시하면 그 작업이 언제 끝나는 지는 신경쓰지 않는다.
2. 블로킹 (Blocking) & 논블로킹 (Non-Blocking)
- 다른 주체가 작업할 때 자신의 제어권이 있는지 없는지로 볼 수 있다.
1. 블로킹 (Blocking)
- A함수가 B함수를 호출하면 제어권을 A가 호출한 B함수에 넘겨줌.
- A가 실행하다 B를 호출함.
- 제어권을 B에게 넘겨줌
- B함수를 실행함
- B의 실행이 끝나면 A에게 다시 제어권을 넘겨줌
- 다시 A함수 실행
2. 논블로킹 (Non-Bloking)
- A 함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.
- A가 B를 호출하지만, 제어권은 A가 그대로 가지고 있으며 계속 A함수가 실행된다.
- 제어권은 받지 않고 B함수는 실행하고 종료된다.
3. 동기&비동기 + 블로킹&논블로킹 비교
1. Sync & Blocking
- 절차
- A가 실행하다 B를 호출함.
- 제어권을 B에게 넘겨줌
- B함수를 실행함
- B함수가 완료되면 A에게 다시 제어권을 넘겨줌
- 다시 A함수 실행
- 정리
- 현재 작업의 응답과 다음 작업의 요청의 타이밍을 동시에 맞춤 (Sync)
- 제어권을 B에게 넘겨주고 B가 실행을 완료하여 제어권을 돌려줄때까지 기다림 (Blocking)
2. Sync & Non-Blocking
- 절차
- A가 실행하다 B를 호출함.
- 제어권은 A가 그대로 가지고 있고 B함수는 실행됨
- A가 실행되면서 B함수가 완료되었는지 중간중간 계속 체크함
- B함수가 끝났다고 A에게 알려주면서 응답 값이 존재하면 리턴해줌.
- 다시 A함수 실행
- 정리
- A는 B가 끝나는 시간을 맞추기 위해 중간중간에 완료가 되었는지 계속 체크를 해서 끝나는 시간을 맞춤 (Sync)
- A는 B에게 제어권을 주지 않고 자신의 코드를 계속 실행함 (Nonblocking)
3. Async & Non-Blocking
- 절차
- A는 실행중 B를 호출하고 계속 실행됨.
- 제어권은 A가 그대로 가지고 있고 B함수는 실행됨
- B의 작업이 끝나면 콜백을 실행함.
- 정리
- A는 B에게 제어권을 주지 않고 계속 실행되는 상태 (Nonblocking)
- A가 B를 호출할 때 콜백함수를 함께 주는데, B는 작업이 끝나면 A가 준 콜백함수를 실행함 (Async)
4. Async & Blocking
- 절차
- A가 실행하다 B를 호출함.
- 제어권을 B에게 넘겨줌
- B함수를 실행함
- B함수가 완료되면 콜백함수 실행하고 A에게 다시 제어권을 넘겨줌
- 다시 A함수 실행
- 정리
- A는 B함수가 종료되든 말든 신경쓰지 않고, 콜백함수를 보냄 (Async)
- A는 B함수의 작업에 관심 없음에도 A함수는 B에게 제어권을 넘김 (Blocking)
4. 결론
- 동기/비동기
- 요청받은 함수가 작업을 완료했는지를 체크해서 순차적 흐름의 차이
- 동기 : 요청자가 요청받은 함수의 작업이 완료되었는지 계속 확인 (함수들의 시간을 맞춤)
- 비동기 : 요청자는 요청 후 신경쓰지 않음. 요청 받은 함수가 작업을 마치면 알려줌. (작업시간/종료시간 맞추지 않음)
- 블로킹/논블로킹
- 요청받은 함수가 제어권을 계속 가지고 있는지 없는지에 대한 여부
- 블로킹 : 요청된 함수가 작업을 끝내고 제어권을 다시 넘겨줌 (요청자는 대기)
- 논블로킹 : 요청된 함수가 요청자에게 제어권을 바로 넘겨줌 (요청자는 자기 일을 계속함)
참고
반응형
'Java & Kotlin' 카테고리의 다른 글
자바의 IO와 (New)NIO란? (0) | 2023.04.09 |
---|---|
자바에서 transient 는 어떤 키워드 인가? (0) | 2023.04.03 |
자바의 리스트들은 어떻게 동작할까?(ArrayList, LinkedList) (0) | 2023.03.27 |
로깅에 대해 알아보자 (0) | 2023.03.25 |
System.out.println 메소드는 실무에서 `절대 사용하지마라.` (0) | 2023.03.21 |