-
동기 VS 비동기, 블로킹 VS 논블로킹✍️ 개인 스터디 기록 2022. 11. 6.
동기 VS 비동기
이전 작업의 결과가 다음단계 에서 바로 보장되냐 아니냐의 차이이다.
즉 만약 어떤 작업이 동기 작업이라면, 그 작업의 결과값을 내가 바로 다음 단계에서 확인 할 수 있다는 것이다.
즉 만약 어떤 작업이 비동기 작업이라면, 그 작업의 결과값을 내가 바로 다음에서 확인하는것을 보장하지 않는다는 것이다. 즉 다음단계에서 결과값이 없을 수도 있다는 것이다.
그러므로 어떤 작업을 동기적으로 실행시킬지, 비동기적으로 실행시킬지 선택해야하는 상황이라면
만약 다음 작업에서 이전 작업의 결과값이 꼭 필요하다면 동기적인 방법으로,
이전 작업의 결과 값이 다음단계에서는 구지 필요 없는 상황 이라면 비동기적인 방법을 써도 괜찮다고 볼 수 있다.
블로킹 VS 논블로킹
제어권(다음 코드를 실행)을 막는지 아닌지의 여부
즉 만약 어떤 작업이 블로킹 작업이라면, 그 작업을 실행하는 순간 제어권이 그쪽으로 넘어간다는 것을 의미한다. 즉 나는 그 작업이 끝날때까지 강제로 대기하게 되는 것이다. ㄷ ㄷ ㄷ ㄷ
반대로 만약 어떤 작업이 논블로킹 작업이라면, 그 작업이 실행 되도 나는 제어권이 남아있어서 하던 일을 계속하고 대기할 필요가 없어지는것을 의미한다.
동기 VS 비동기 X 블로킹 VS 논블로킹
동기 I/O
(I/O작업의 결과 값이 다음 작업에 바로 보장 됨)비동기 I/O
(I/O작업의 결과 값이 다음 작업에 없을 수 있음, 보장X)블로킹 I/O(제어권을 박탈, I/O 처리한다고 멈춤) 내가 I/O작업 호출 했는데 그거 실행 될때까지 나는 멈추고(블로킹), I/O작업 완료 되면 실행 결과도 보장되므로 그거 가지고 나머지 작업들을 실행(동기) 하는 구조 내가 I/O작업을 호출 했는데 그거 실행 될 때까지 나는 일단 멈춤, 그런데 내가 I/O작업 결과 값 가지고 내가 딱히 어떤 작업을 하는건 아님
⇒ 별도로 I/O작업 결과 값 가지고 내가 딱히 어떤 작업을 이어서 하는건 아닌데 I/O작업 실행 될때 까지 내가 멈출 필요가 있을까?
⇒ 구지 이 방식을 선택해서 사용하는 케이스는 거의 없을 듯논블로킹 I/O (제어권 유지, I/O 처리하느라 안멈춤) 내가 I/O작업 호출 했는데 그거 실행 될때까지 나는 안멈추고(논블로킹) 계속 I/O작업 완료 됬는지 체크함 그리고 비로소 I/O작업이 완료 되면 그 실행 결과 가지고 나머지 작업들을 실행(동기) 하는 구조 내가 I/O작업 호출 했는데 그거 실행될 때까지 나는 안멈추고 내 다른 할일 함. (I/O작업의 결과는 어차피 그때는 보장받을 수 없으니까 결과랑 상관없는 일만 함) 출처:
'✍️ 개인 스터디 기록' 카테고리의 다른 글
모던 자바스크립트 Deep Dive 퀴즈 리스트 (0) 2022.12.02 [NodeJS] C10K Problem 과 NodeJS (1) 2022.11.27 [Node.js] 비동기와 Promise 이해하기 (0) 2022.11.27 [대규모 서비스 with Redis] - 1. 대규모 서비스의 특성 (0) 2022.11.27 docker-compose 로 개발환경 구성 (0) 2020.04.24