[CS] 싱글 스레드와 멀티 스레드

수민🐣·2022년 10월 19일
0

CS

목록 보기
5/12

싱글 스레드와 멀티 스레드

싱글 스레드

하나의 프로세스에서 하나의 스레드 실행

  • 자원 접근에 대한 동기화를 신경쓰지 않아도 된다. 👍
    • 여러개의 스레드가 공유된 자원을 사용할 경우, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근이 통제되어야 하며, 이 작업은 프로그래머에게 많은 노력을 요구하고 많은 비용을 발생시킨다.
  • 작업전환 작업을 요구하지 않는다. 👍
    • 작업전환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 한다.
  • 여러 개의 CPU를 활용하지 못한다. 👎
    • 두 개의 작업을 하나의 스레드로 처리하는 경우와, 두 개의 스레드로 처리하는 경우를 가정했을 때, 후자의 경우는 짧은 시간 동안 2개의 스레드가 번갈아가면서 작업을 수행한다. 그래서 동시에 두 작업이 처리되는 것과 같이 느끼게 된다. 하지만 오히여 두 개의 스레드로 작업한 시간이 싱글스레드로 작업한 시간보다 더 걸릴 수도 있는데, 그 이유는 스레드 간의 작업전환(context switching)에 시간이 걸리기 때문이다. 따라서 단순히 CPU만을 사용하는 계산작업이라면, 오히려 멀티스레드보다 싱글스레드로 프로그래밍하는 것이 더 효율적이다.

멀티 스레드

프로그램을 다수의 실행 단위로 나누어 실행.

  • 프로세스 내에서 자원을 공유하여 자원 생성과 관리의 중복을 최소화 👍
    • 새로운 프로세스를 생성하는 것보다 기존 프로세스에서 스레드를 생성하는 것이 빠르다.
    • 프로세스의 자원과 상태를 공유하여 효율적으로 운영이 가능하다.
  • 서버가 많은 요청을 효율적으로 수행할 수 있는 환경을 제공 👍
  • 프로세스의 작업전환보다 스레드의 작업전환이 더 빠르다. 👍
  • 하나의 스레드만 실행중일 때는 실행시간이 오히려 지연될 수 있다. 👎
  • 멀티 스레딩을 위해 운영체제의 지원이 필요하다. 👎
  • 스레드 스케쥴링을 신경써야 한다. 👎

0개의 댓글