블록킹과 논블록킹은 코드 실행의 흐름과 자원의 사용 방식에 관한 개념
- 블록킹 (Blocking): 블록킹은 해당 작업이 완료될 때까지 프로그램의 실행이 멈추는 방식
예를 들어, 데이터베이스에서 데이터를 가져오는 동안 다른 작업을 수행할 수 없고, 데이터가 준비될 때까지 기다려야함 일반적으로 동기식 호출과 연관이 있으며, 처리 순서가 직관적 - 논블록킹 (Non-Blocking): 논블록킹 호출은 작업이 즉시 반환, 해당 작업이 완료될 때까지 기다리지 않는 방식
프로그램은 다른 작업을 계속해서 수행할 수 있으며, 작업이 완료되면 그 결과를 처리
비동기식 호출과 관련이 있으며, 자원 활용을 최적화 가능
장점:
- 블록킹:
- 코드가 간단하고 이해하기 쉬움
- 직관적인 흐름으로 디버깅이 용이
- 요청이 적거나 성능이 중요한 요소가 아닌 경우 적합
- 논블록킹:
- 자원을 효율적으로 사용하여 더 많은 작업을 동시에 처리 가능
- 시스템의 응답성
- 대규모 병렬 처리가 필요한 애플리케이션에 적합
단점:
- 블록킹:
- 자원 대기 시간이 길어질 수 있음
- 여러 요청을 동시에 처리할 때 성능 저하 발생 가능
- 시스템의 응답성이 낮아질 수 있음
- 논블록킹:
- 코드가 복잡해지고 디버깅이 어려울 수 있음
- 오류 처리와 예외 관리가 복잡해질 수 있음
- 코드의 비동기 흐름을 이해하기 어렵다.
사용 예시:
- 블록킹 사용 예시 - 파일 읽기:
- 파일이 완전히 읽히기 전까지 프로그램이 다른 작업을 하지 않음
with open('file.txt', 'r') as file:
data = file.read() # 파일을 다 읽을 때까지 프로그램이 멈춤 (블록킹)
print(data)
- 논블록킹 사용 예시 - 비동기 파일 읽기 (Python Asyncio):
- 파일을 읽는 동안에도 다른 작업을 동시에 수행 가능
import asyncio
import aiofiles
async def read_file():
async with aiofiles.open('file.txt', 'r') as file:
data = await file.read() # 파일을 읽는 동안 다른 작업을 할 수 있음 (논블록킹)
print(data)
asyncio.run(read_file())
- 논블록킹 사용 예시 - 비동기 파일 읽기 (Python Asyncio): 논블록킹 사용 예시 - Node.js HTTP 서버:
- 서버는 요청을 즉시 반환하고, 2초 후에 응답을 보냄
- 이 동안 다른 요청 처리 가능
const http = require('http');
const server = http.createServer((req, res) => {
setTimeout(() => {
res.end('Hello World'); // 요청 처리가 논블록킹 방식으로 이루어짐
}, 2000);
});
server.listen(3000, () => {
console.log('Server running on port 3000');
});
'공부' 카테고리의 다른 글
서버 스케줄링이란 (0) | 2024.08.31 |
---|---|
시스템 설계란 (0) | 2024.08.31 |
Spring과 Node.js (1) | 2024.08.30 |
백엔드 아키텍처란 (2) | 2024.08.30 |
RDBMS와 NoSQL의 차이 (1) | 2024.08.29 |