개발/기술
single threaded vs multi threaded
kwony
2023. 3. 16. 16:15
싱글 쓰레드 시스템은 쓰레드 하나로 시스템을 구성하는 방식이고 멀티 쓰레드 시스템은 두개 이상의 쓰레드를 이용해서 프로그램을 구성하는 것을 말한다. 멀티 코어가 대세인 하드웨어 환경이라면 쓰레드를 늘려서 시간당 작업량을 늘리는게 당연히 좋지 않을까 하는 생각이 들겠지만 구조마다 장/단점이 있다.
Single Thread 특징
- Simplicity: 쓰레드가 하나만 있기 때문에 간단한 아키텍처를 구항할 수 있다. 개발하고 배포하고 유지하기가 쉽다. 멀티 쓰레드 환경에서 발생할 수 있는 동시성 이슈 같은 것은 고민하지 않아도 된다.
- Limited Concurrency: 싱글 쓰레드 환경에서는 요청 하나당 한개만 처리할 수 있다. 동시에 처리할 수 없기 때문에 응답 속도도 느려지고 througput도 좋지 않다.
- Predictable Latency: 싱글 쓰레드 시스템은 모든 요청이 순서대로 처리되며 race condition 이나 쓰레드 간의 자원간의 경쟁이 없기 때문에 예상 가능한 latency를 보장 할 수 있다.
- Limited Scalability: 싱글 쓰레드 시스템은 쓰레드를 늘릴 수 없기 때문에 확장하기가 어렵다. 그래서 부하가 심한 상황에서 동시성을 보장하기가 쉽지 않을 것이다
Multi Thread 특징
- Complex: 한 프로그램에서 두개 이상의 쓰레드가 돌아가기 때문에 복잡하다. 싱글 쓰레드에서는 신경쓰지 않앗던 동시성 이슈 같은 것을 여기서는 신경써야 한다.
- Higher concurrency: 대신 쓰레드가 여러개이기 때문에 여러 요청을 동시에 처리할 수 있다. response time도 줄어 들고 throughput도 개선 할 수 있다.
- Less Predictable Latency: 단 latency를 예상하기 힘들다. 쓰레드들간에 경쟁이 잇을 수 있기 때문에 부하가 센 경우에는 응답시간이 늘어날 수 있다.
- Better Scalability: 쓰레드 개수를 늘리면 쉽게 확장이 가능하다. 그래서 부하가 세지면 더 쉽게 처리할 수 있는 장점이 있다.
Example
NodeJs, Redis가 대표적인 싱글 쓰레드 시스템이고 Spring, MySQL이 대표적인 멀티 쓰레드 시스템이다. 하드웨어의 코어개수가 끊임없이 늘어나고 있지만 여전히 NodeJS, Redis가 싱글 쓰레드를 고수하는 것을 보면 멀티, 싱글 중에서 어떤 것이 우월하다고 말하기는 힘들고 어떤 요구사항이냐에 따라 선택하는 것이 중요하다.