Computer Science/운영체제

[운영체제] 싱글 스레드와 멀티 스레드

excited-hyun 2021. 11. 11. 14:54
반응형

싱글 스레드

하나의 프로세스 내에서 하나의 스레드만 실행되는 것을 말합니다.

그렇기 때문에 하나의 PC레지스터와 하나의 스택을 가지고 있습니다.

 

멀티 스레드

하나의 프로세스 내에 여러 스레드를 구성해서 각각의 스레드가 하나의 작업을 처리하는 것을 말합니다.

각각의 스레드는 PC 레지스터와 스택을 따로 가지고 있으며, 쓰레드 간에 데이터 영역이나 힙 영역을 공유하며 동작합니다.

자원 공유를 통해 자원의 중복을 최소화하여 관리할 수 있습니다.

 

싱글 스레드의 장단점

장점

  • 스레드 간의 자원 공유가 없기 때문에 그에 대한 동기화에 대해 신경쓰지 않아도 됩니다.
  • 스레드 간의 context switching이 일어나지 않으므로 이 과정에서 발생하는 오버헤드를 방지할 수 있습니다.

단점

  • 여러개의 CPU를 활용하지 못합니다.

 

멀티 스레드의 장단점

장점

  • 프로세스의 자원과 상태를 스레드간에 공유하면서 보다 효율적인 실행과 스레드간의 통신이 가능합니다.
  • 프로세스의 context switching 의 경우엔 캐시 메모리를 비우는 작업도 요구되는데, 스레드의 context switching의 경우는 그럴 필요가 없어 작업 전환이 더 빠릅니다.

단점

  • 하나의 스레드만 동작할 필요가 있는 경우는 오히려 지연될 수 있습니다.
  • 공유 자원에 대한 접근을 제어해주는 작업이 필요합니다. 이를 과도한 락을 사용해 제어하게 되면 병목현상으로 인해 오히려 성능 저하가 일어날 수 있습니다.
  • 마찬가지로 공유 메모리를 사용하기 때문에 하나의 스레드가 죽으면 전체 스레드에 영향을 미치게 됩니다.

 

싱글 스레드 vs 멀티 스레드

저는 당연히 멀티스레드가 항상 좋지 않나? 라고 생각했는데 항상 그런 것은 아니더군요!!

 

  • 단순히 CPU만을 사용하는 계산작업이 주로 일어나는 경우

이 경우는 멀티 스레드보다 오히려 싱글 스레드를 이용하는 것이 효율적입니다.

멀티 스레드는 context switching이 일어나는 시간이 추가로 걸리기 때문이죠!! 싱글 스레드의 경우엔 하나의 작업을 마치고 그 다음 작업을 하면 되므로 이런 시간을 절약할 수 있습니다.

 

  • CPU 이외의 자원을 사용하는 작업의 경우

이 경우는 싱글 스레드보다 멀티 스레드로 하는 것이 효율적입니다!!

예를 들어 사용자에게 입력받는 작업과 출력하는 작업 두 가지를 해야한다면, 싱글 스레드의 경우 사용자가 입력을 다할 때 까지 출력은 하지 못하고 기다리고만 있어야 합니다. 그렇지만 여러개의 쓰레드를 이용한다면 사용자가 입력하는 걸 기다리는 동안 출력이라는 작업으로 context switching 하여 그를 수행할 수 있으므로 좀 더 효율적으로 동작하게 됩니다!!

 

 

728x90
반응형