멀티스레딩
멀티스레딩은 하나의 프로세스 내에서 여러 스레드를 생성하여 동시에 여러 작업을 수행하는 방식입니다.
- 작동 방식: 각 스레드는 독립적으로 실행되며, 자신의 호출 스택을 가집니다. 여러 스레드가 동시에 실행될 수 있으므로 CPU 코어 수에 따라 실제 병렬 처리가 가능합니다.
- 사용 사례: 멀티스레딩은 CPU 바운드 작업, 즉 계산이 많이 필요한 작업에 적합합니다. 또한 I/O 바운드 작업에도 사용될 수 있지만, 스레드 생성과 관리 오버헤드가 있을 수 있습니다.
장점:
- 단순성: 스레드 생성 및 관리가 상대적으로 간단합니다.
- 병렬 처리: 실제 병렬 처리로 CPU 성능을 최대한 활용할 수 있습니다.
- 직관적 프로그래밍: 각 스레드가 독립적으로 실행되므로 직관적으로 프로그래밍할 수 있습니다.
단점:
- 자원 소모: 많은 스레드를 생성하면 스레드마다 스택 메모리와 컨텍스트 스위칭 오버헤드가 발생합니다.
- 복잡한 동기화: 공유 자원에 접근할 때 동기화가 필요하여 복잡성이 증가할 수 있습니다.
- 스레드 관리: 스레드 수가 많아지면 관리가 어려워지고, 성능 저하가 발생할 수 있습니다.
비동기 I/O (NIO)
비동기 I/O는 단일 스레드 또는 소수의 스레드가 여러 I/O 작업을 비동기적으로 처리하는 방식입니다. 자바에서는 주로 java.nio 패키지를 사용하여 구현합니다.
- 작동 방식: 비동기 I/O에서는 하나의 스레드가 여러 I/O 채널을 감시하고, 각 채널에서 이벤트가 발생할 때 이를 처리합니다. 이를 통해 스레드가 I/O 작업을 기다리지 않고 다른 작업을 수행할 수 있습니다.
- 사용 사례: 비동기 I/O는 I/O 바운드 작업, 즉 네트워크 통신이나 파일 입출력 등에서 높은 성능을 발휘합니다.
장점:
- 효율성: 단일 스레드로 여러 I/O 작업을 처리할 수 있어 스레드 생성과 관리 오버헤드가 적습니다.
- 확장성: 많은 동시 연결을 처리할 수 있으므로, 네트워크 서버와 같은 환경에서 유리합니다.
- 자원 절약: 적은 수의 스레드로 많은 작업을 처리할 수 있어 메모리와 CPU 자원을 절약할 수 있습니다.
단점:
- 복잡성: 비동기 I/O 프로그래밍은 멀티스레딩보다 복잡합니다. 이벤트 기반 프로그래밍 모델을 이해하고 구현해야 합니다.
- CPU 바운드 작업 비적합: 비동기 I/O는 주로 I/O 바운드 작업에 적합하며, CPU 바운드 작업에는 적합하지 않습니다.
- 디버깅 어려움: 비동기 이벤트 기반 모델은 디버깅이 어렵고, 코드의 가독성이 떨어질 수 있습니다.
'java' 카테고리의 다른 글
디자인패턴에서 자주 쓰이는 용어 정리(GPT)(2) (0) | 2024.07.16 |
---|---|
디자인패턴에서 자주 쓰이는 용어 정리(GPT)(1) (0) | 2024.07.16 |
ExecutorService 기반 스레드 생명주기와 자원관리 (0) | 2024.07.08 |
JAVA Beans 패턴 (0) | 2024.07.05 |
JAVA Servlet 주요 인터페이스 정리 (GPT ver) (0) | 2024.07.04 |