-
동기 / 비동기, 블로킹 / 논블로킹DEV 2023. 9. 23. 19:02728x90
동기와 비동기
- 동기(Synchronous): 요청한 작업을 완료 여부에 따라서 작업을 처리
- 비동기(Asynchronous): 요청한 작업을 완료 여부를 따지지 않고 작업을 처리
A, B, C라는 3개의 작업이 실행될 때 동기는 순차적으로 A -> B -> C 순으로 처리가 되지만 비동기는 순서가 보장되지 않고 무작위로 작업이 수행됩니다. (ex A -> C ->B or C -> B -> A ....)
// 동기 console.log("A"); console.log("B"); console.log("C"); // 결과값: A B C // 비동기 fetch("https://google.com").then((response) => console.log("A"); fetch("https://google.com").then((response) => console.log("B")); fetch("https://google.com").then((response) => console.log("C")); // 결과값은 무작위
블로킹과 논블로킹
- 블로킹(Blocking): 작업 수행 중 다른 작업을 처리하기 위해 현재 작업을 블락 후 다른 작업이 완료되면 작업 재개
- 논블로킹(Non-Blocking): 작업 수행 중 다른 작업이 수행되어도 현재 작업을 블락하지 않고 다른 작업과 동시에 수행 가능
동기 / 비동기, 블로킹 / 논블로킹
동기 / 비동기, 블로킹 / 논블로킹을 조합하여 4가지 처리 방법을 사용할 수 있습니다.
동기 + 블로킹
동기 + 블로킹 조합은 다른 작업이 진행되는 동안 자신의 작업을 블로킹하고 다른 작업의 완료 여부를 받아 순차적으로 처리되는 방식으로 순차적인 의존성이 있는 작업을 수행할 경우 사용됩니다.
const file1 = fs.readFileSync("file1.txt", "utf-8"); const file2 = fs.readFileSync("file2.txt", "utf-8"); const file3 = fs.readFileSync("file3.txt", "utf-8");
동기 + 논블로킹
동기 + 논블로킹은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 다른 작업의 결과를 바로 처리하여 작업을 순차대로 수행하는 방식입니다.
동기 + 블로킹 방식과 동일하게 순차적인 의존성이 있는 작업을 수행할 경우 사용됩니다.
async function exampleFunction() { await nonBlockingFunction(); } async function nonBlockingFunction() { // 내부로직은 비동기 + 논블로킹으로 }
비동기 + 논블로킹
비동기 논블로킹 조합은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 다른 작업의 결과를 바로 처리하지 않아 작업 순서의 순차보장이 되지 않는 방식입니다. 순차적인 의존성이 없을 경우 사용됩니다.
fetch("https://google.com").then((response) => console.log("A"); fetch("https://google.com").then((response) => console.log("B")); fetch("https://google.com").then((response) => console.log("C"));
비동기 + 블로킹
비동기 + 블로킹 조합은 다른 작업이 진행되는 동안 작업을 블로킹하고 다른 작업의 결과를 바로 처리하지 않아 작업의 순차 보장을 하지 않는 방식입니다.
728x90'DEV' 카테고리의 다른 글
Docker Network (0) 2023.09.17 Service Mesh란? (0) 2023.07.16 Docker로 Redis cluster 구성 (0) 2022.05.01 [Docker] 설치 및 기본 명령어 (0) 2021.01.30 Kafka란? (0) 2020.08.27