CS로 알아보는 프로젝트 - 단일 스레드와 다중 스레드

 

안녕세요.

 

오늘은 단일, 다중 스레드에 대해 알아보도록 하겠습니다.

 

프로그래밍을 하거나, 운영체제 학습하다 보면 자주 들었을 스레드 알고 있는 만큼 충분히 고민해 보시고 스스로 답해보세요.

 

아마 아래와 같은 키워드 "다중 스레드",  "단일 스레드" ,  "동시성",  "병령성" 등 명확하게 구분이 가능하신가요? 

 

하나하나 자세히 알아보도록 하겠습니다. 

 

 

 

먼저 스레드가 무엇인지에 대해 알아볼 필요가 있습니다.

 

스레드란 "실행 중인 프로그램의 작업 단위"를 의미합니다.

 

각각의 스레드는 독립적으로 실행될 수 있으며, 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행할 수 있습니다. 

 

스레드는 프로세스 내의 리소스를 공유하며, 스레드 간의 통신이나 데이터 공유가 간단하는 특징을 가지고 있습니다. 

 

스레드의 동작 방식으로는 크게 단일 스레드, 다중 스레드 방식을 가지고 있습니다. 

 

 

 

그럼 동작 방식에 대해 자세히 알아볼까요?

 

여러개의 스레드가 프로세스 자원을 공유할 경우, 각 스레드가 원하는 결과를 얻기 위해 공용 자원에 접근을 제어합니다.

 

만약 여러 스레드가 일정 자원에 동시 접근하거나 같은 작업을 실행한다면 원하는 결과로의 도출을 실패할 가능성이 전무합니다.

 

즉, 동시성을 고려한 설계를 통해 동시에 같은 자원에 접근하지 못하게 제어해야합니다.

 

 

그럼, 단일 스레드에 대해 자세히 알아볼까요? 

 

단일 스레드는 프로세스가 단일 스레드 즉, 하나의 스레드만 이용하여 동작을 처리하는 방식을 의미합니다.

 

처리를 단일 스레드로만 직렬 처리하는 기법이죠 

 

대표적인 언어로는 JavaScript가 있습니다.

 

 

싱글 스레드의 경우 다음과 같은 장점이 존재하는데요.

 

여러 스레드가 동시에 접근하는 경우가 없기 때문에 자원 접근에 대한 동기화를 신경 쓰지 않아도 됩니다.

 

또한, 문맥 교환이라고 불리는 Context Swiching 을 요구하지 않아 보다 쉬운 프로그래밍이 가능하다는 점도 장점 입니다. 

 

하지만, 단점도 명확하게 존재하는데요.

 

 

여러 개의 스레드를 사용하지 못 하는 만큼 고성능 PC를 활용하더라도 효율적인 운영이 불가능하다는 단점이 존재합니다.

프로세서끼리의 자원 공유가 어렵기 때문에 Redis와 같은 DB를 활용하여 자원 공유용 인프라를 구성해주기도 합니다.

 

또한, 연산량이 많아진다면 해당 연산이 끝나고 난 뒤 다음 작업이 이루어진다는 단점이 존재합니다. 

 

에러 상황이 발생하면 이를 대처해줄(대신 처리해줄) 스레드가 없기 때문에 프로그램 자체가 종료된다는 단점도 존재합니다. 

 

 

단일 스레드의 장,단점에 대해 알아봤으니 이제 다중 스레드의 장단점을 알아볼까요?

 

먼저 다중 스레드의 경우 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 방식을 의미합니다.

즉, 여러개의 스레드를 사용하여 여러 프로세스를 동시에 수행하는 것이죠 

 

 

다중 스레드의 장점으로는 작업을 분리해서 실시간으로 사용자에게 응답할 수 있다는 장점이 존재합니다.

 

하나의 스레드가 일을하고 있다면 다른 스레드에게 일을 위임하여 일을 시킬 수 있는 것이죠.

즉, 병렬적으로 일을 처리할 수 있습니다. 

 

한 프로세스내에서 여러개의 스레드를 돌리기 때문에 CPU의 성능을 효율적으로 사용할 수 있다는 장점이 존재합니다. 

 

 

그치만, 단점도 존재하는데요.

 

위의 장점을 살리기 위해 자원 공유 문제를 반드시 해결해야한다는 단점이 존재합니다.

 

하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받기 때문입니다.

 

또한, 문맥 교환 작업을 요구합니다.

 

cpu가 여러 프로세스가 돌아가면서 작업을 처리하는데 해당 과정이 빈번하게 이루어진다면 부하가 발생할 가능성이 존재합니다. 

 

 

 

 

 

 

다음 포스팅으로 동시성과 병령성에 대해 다루어보고자 합니다. 혹시라도, 동시성과 병령성에 대해 의문이 존재한다면 아래 포스팅을 참조해주세요.

 

https://security-gom.tistory.com/67

 

CS로 알아보는 프로젝트 - 동시성과 병렬성, 동기와 비동기 Feat: 코어와 스레드

안녕하세요. 오늘은 동시성과 병렬성에 대해 알아보도록 하겠습니다. 동시성 병렬성 혹시 구분이 가능하신가요??? 그럼 동기와 비동기, 동시성과 병렬성을 명확하게 구분하실 수 있으신가요??

security-gom.tistory.com