멀티스레딩은 크게 4개의 장점을 가진다.
1. 응답성 (Responsiveness)
싱글스레드로 서버와 클라이언트 간의 통신을 처리하려고 하면 서버는 다수의 통신을 순차적으로 처리하게 된다.
그러나 멀티스레드로 처리한다면 아래 사진처럼 병렬로 처리할 수 있게 된다.
통신이 연결될 때마다 새로운 스레드를 생성하고, 그 스레드에서 통신을 처리하도록 한다.
그러면 뒷 순서의 클라이언트들도 기다릴 필요 없이 빠르게 응답을 받을 수 있다.
응답성이 의미하는 바는 이런 것이다.
2. 자원 공유 (Resource Sharing)
프로세스들 간의 자원 공유는 Shared memory나 Message passing으로 이루어 지는 반면, 스레드 간의 자원 공유는 비교적 간단하다.
위 사진처럼 스레드들은 스택을 제외한 나머지 영역들을 모두 공유하고 있기 때문이다.
물론 이로 인해 생기는 문제도 있지만, 여기선 다루지 않겠다.
3. 경제성 (Economy)
fork()로 자식 프로세스를 생성하면 부모 프로세스의 메모리 영역을 그대로 복사하여 가져오게 되는데, 만약 그 부모 프로세스가 굉장히 무거운 프로그램이라면?
메모리에 상당한 부담을 줄 것이다.
반면에 스레드는 프로세스 내부에서 생성되는 것이므로 비교적 더 싸고 Context switching도 더 빠르다.
4. 확장성 (Scalability)
프로세서가 아무리 많아도 프로세스가 싱글스레드라면 단 하나의 프로세서밖에 활용할 수 없다.
하지만 멀티스레딩을 구사한다면 다수의 프로세서를 활용할 수 있고, 이는 서비스의 범위가 확장되어도 유연하게 대처할 수 있게 해준다.
그러나 장점이 있으면 단점도 있는 법,
멀티스레딩을 구사하기 위해서는 아래의 과제들을 수행해야 한다.
1. 멀티스레드로 분할할 수 있는 작업이 무엇인지 식별해야 한다.
2. 스레드 간의 작업량을 균일하게 설정해야 한다.
3. 각 스레드에 데이터를 분배하고, 그 분배된 데이터들 간의 의존 관계를 해결해야 한다.
4. 멀티스레드 환경에서의 복잡한 디버깅을 수행해야 한다.
'CS > 운영체제' 카테고리의 다른 글
경쟁 상태(Race condition)의 간단한 예시 (0) | 2022.08.25 |
---|---|
FCFS, SJF, SRTF, RR의 계산 및 비교 (0) | 2022.08.23 |
Context switch란 (0) | 2022.08.19 |
프로세스 상태 전이도 요약 (0) | 2022.08.19 |
좀비 프로세스란 (0) | 2022.08.08 |
댓글