1. 동기-블로킹 모델
-
기본 원리
- 동기-블로킹 모델에서는 하나의 작업이 완료되어야만 다음 작업을 진행할 수 있다.
-
작동 방식
- 쓰레드가 작업을 시작하면, 그 작업이 완료되는 시점까지 쓰레드는 그 작업에 "바인딩"된다.
-
장단점
- 장점: 코드 작성이 상대적으로 간단하고 직관적이다.
- 단점:
- 쓰레드가 작업 완료를 기다리는 동안 다른 작업을 처리할 수 없어, 리소스가 비효율적으로 사용된다.
- 시스템이 병목 현상에 빠질 위험이 높다.
-
예시
- 사용자가 채팅 메시지를 보내면, 서버는 메시지를 데이터베이스에 저장하고, 저장이 완료된 후에만 다음 단계(예: 메시지 브로드캐스팅)로 넘어간다.
2. 비동기-논블로킹 모델
-
기본 원리
- 비동기-논블로킹 모델에서는 작업을 시작한 후 완료를 기다리지 않고, 다른 작업을 동시에 처리할 수 있다.
-
작동 방식
- 쓰레드는 작업을 시작한 다음, 해당 작업이 끝날 때까지 기다리지 않고 바로 다음 작업을 시작한다. 작업 완료 시에는 콜백 함수나 이벤트를 통해 결과를 받는다.
-
장단점
- 장점:
- 높은 처리량과 낮은 지연 시간을 달성할 수 있다.
- 시스템 자원을 효율적으로 활용한다.
- 단점:
- 코드 복잡성이 증가할 수 있다.
- 상태 관리가 어려울 수 있다.
-
예시
- 사용자가 채팅 메시지를 보내면, 서버는 데이터베이스 저장 작업을 시작하고, 그와 동시에 다른 사용자의 메시지도 처리한다. 데이터베이스 저장 작업이 끝나면 콜백을 통해 결과를 확인하고 추가 작업을 수행한다.
3. 장점
- 효율적인 리소스 사용: 여러 작업을 동시에 처리할 수 있으므로 CPU와 메모리 사용이 효율적이다.
- 높은 처리량: 하나의 서버로 더 많은 작업을 동시에 처리할 수 있다.
- 반응성: 하나의 작업이 지연되더라도, 다른 작업들은 그대로 진행된다.
4. 채팅 애플리케이션에서의 활용
- 실시간 채팅 애플리케이션에서는 수많은 유저가 동시에 메시지를 주고받습니다. 비동기-논블로킹 모델을 사용하면, 하나의 메시지가 처리되는 동안 다른 메시지도 동시에 처리할 수 있습니다. 이는 곧 더 많은 유저를 더 빠르게 처리할 수 있음을 의미합니다.
- 메시지 순서는 어떻게 해야할까?
- 만약 비동기 처리중 먼저 보낸 메시지보다 다음 메시지가 먼저 도착했을 경우는?