728x90
1. 동기 / 비동기
- 동기와 비동기를 구분 짓는 가장 명확한 기준은 ⭐️요청한 작업에 대한 완료 여부⭐️이다. 즉, 동기와 비동기는 요청한 작업에 대해 완료 여부를 신경 써서 다음 작업을 순차적으로 수행할지 비순차적으로 수행할지에 따라 나뉜다고 보면 된다
- 동기(synchronous) : 요청한 작업에 대해 완료 여부를 따지며 순차적으로 작업을 처리하는 것
- ex) 100원 주세요 -> 100원 받음 -> 500원 주세요 -> 500원 받음
- 비동기(asynchronous) : 요청한 작업에 대해 완료 여부를 따지지 않고 자신의 다음 작업을 그대로 수행하는 것
- ex) 100원 주세요 -> (100원 아직 받지도 않았는데) 500원 주세요 -> 100원 받음 -> 500원 받음
2. 블로킹 / 논블로킹
- 블로킹과 논블로킹을 구분 짓는 가장 명확한 기준은 ⭐️요청한 작업이 처리되는 동안 현재 작업의 차단 여부⭐️이다.
- 블로킹(blocking) : 요청에 대한 코드가 끝나기 전까지 현재 작업 코드의 실행을 막음
- 논블로킹(nonblocking) : 요청에 대한 코드가 끝나기 전까지 현재 작업 코드의 실행을 막지 않음
가끔 블로킹 / 논블로킹과 동기 / 비동기를 헷갈리곤 하는데 앞선 내용에서 알 수 있듯 나누는 기준이 완전히 다르다는 것을 알 수 있다! 그렇다면 동기 / 비동기 + 블로킹 / 논블로킹 조합은 어떻게 활용되곤 할까?
3. 동기/비동기 + 블로킹/논블로킹 조합
(1) Sync Blocking (동기 + 블로킹)
- ⭐️ 요청한 작업이 진행되는 동안 자신의 작업을 처리하지 않고 (Blocking), 요청한 작업이 끝날 경우 반환값을 바로 받아 다음 일을 수행하는 순차적인 일 처리 방식 (Sync)
- ex) 실생활 적용 예시 ⭐️
- 팀장 : 사원 1씨 업무 A 좀 해주세요.
- 사원 1 : 네 알겠습니다. (A를 처리중)
- 팀장 : (사원 1이 A를 다 할 때까지 아무 일도 하지 않고 기다린다.)
- 사원 1 : 팀장님, 업무 A 완료하였습니다.
- 팀장 : 수고했어요. 사원 2씨 업무 B 좀 해주세요.
- 사원 2 : 네 알겠습니다. (B를 처리중)
- 팀장 : (사원 2가 B를 다 할 때까지 아무 일도 하지 않고 기다린다)
- 사원 2 : 팀장님, 업무 B 완료하였습니다.
- 팀장 : 수고했어요. 사원 3씨 업무 C 좀 해주세요.
- ... 생략
(2) Async Non-Blocking 조합
- ⭐️ 요청 작업이 진행되는 동안 자신의 작업을 처리하고 (Non Blocking), 요청한 작업이 끝나지 않더라도 다음 일을 하는 비순차적인 일 처리 방식 (Async)
- ex) 실생활 적용 예시 ⭐️
- 팀장 : 사원1씨 A업무좀 해주세요. (동시에 지시)
- 팀장 : 사원2씨 B업무좀 해주세요. (동시에 지시)
- 팀장 : 사원3씨 C업무좀 해주세요. (동시에 지시)
- 팀장 : 다른일을 해야지 ~
- 사원2 : 팀장인 B 모두 처리했습니다. (업무량에 따라 각 사원마다 완료하는 시간이 제각기 다를 수 있다)
- 사원1 : 팀장인 A 모두 처리했습니다.
- 사원3 : 팀장인 C 모두 처리했습니다.
- ex) 웹 브라우저의 파일 다운로드
- 다운로드되는 동안 다른 파일 다운로드할 수도 있고 다른 탭을 열어 웹 서핑을 할 수도 있다.
- 또한 콜백 함수를 통해 다운로드가 완료되는 알려준다.
(3) Sync Non-Blocking 조합
- ⭐️ 요청 작업이 진행되는 동안에도 자신의 작업을 처리하고 (Non Blocking), 요청한 작업이 끝나지 않으면 다음 일을 하는 순차적인 일 처리 방식 (Sync)
- 동기 + 논블로킹과 동기 + 블로킹이 비슷해보이지만 일반적으로 동기 + 논블로킹이 더 효율적으로 작업을 처리할 수 있다.
- ex) 실생활 동작 예시 ⭐️
- 팀장 : 사원1씨 업무 A 좀 해주세요
- 사원1 : 네 알겠습니다. (A를 처리중)
- 팀장 : 다음 업무 B를 하려면 A가 완료되야 하는데.. 사원1씨 다했어요?
- 사원1 : 아직이요 A 처리중입니다
- 팀장 : 사원1씨 다했어요?
- 사원1 : 아직이요 A 처리중입니다
- 사원1 : 팀장님 A 모두 완료했습니다
- 팀장 : 수고했어요. 사원2씨 업무 B좀 해주세요.
- 사원2 : 네 알겠습니다. (B를 처리중)
- 팀장 : 다음 업무 C를 하려면 B가 완료되야 하는데.. 사원2씨 다했어요? ...생략
(4) Async + Blocking 조합
- ⭐️ 요청 작업이 진행되는 동안에 자신의 작업을 처리하지 않고 (Blocking), 요청한 작업이 끝나지 않았어도 다음 일을 하는 비순차적인 일 처리 방식 (Async)
- sync + blocking과 개념적으로 차이가 있을 뿐 성능적으로는 차이가 없다.