진짜 개발자
본문 바로가기

CS(Computer Science)/운영체제

스레드 개요

728x90

(참조 - http://www.jiniya.net/wp/archives/5856)


스레드 

    - CPU 이용의 기본단위 이다

    - 같은 프로세스에 속한 다른 스레드들과 코드 , 데이터, 파일 등 운영체제의 자원을 공유한다.

    - 스레드ID, 프로그램 카운터(PC), 레지스터집합, 스택 으로 구성됨


배경

  현대의 거의 모든 소프트웨어들은 다중 프로세스,스레드를 이용한다.

  예를들어 서버에서는 실제 서비스는 자식 프로세스에게 맡기고 서버는 다음 요구를 받기위해 다시 대기를 할 수 있다

  또한 웹서버에서는 여러 개의  클라이언트들이 동시에 접근할 수 있다. 이때 만약 웹서버가 단일 스레드 프로세스로 

  동작을 한다면 가장 마지막에 요청한 클라이언트는 자신이 서비스 받기 까지 엄청난 시간을 기다려야 할 것이다. 


어떻게?

 어차피 같은 자원 즉, 이미 가지고 있던 하나의 프로세스로 여러개의 스레드를 생성한들 어떻게 

 동시에 여러작업이 가능한 것일까 ? 

 다중 스레드는 동시에 여러개의 작업을 처리하는 개념이 아닌 사용자가 눈치채지 못할 정도의 매우 짧은 시간동안 

 서비스를 하고 다음 스레드의 서비스를하고 다시 다음 스레드의 서비스를 진행하는 식으로 교체하며 서비스를 하여

 마치 동시에 여러개의 작업을 진행하는 듯한 착각을 일으키는 방법이다.


다중프로세스 -> 다중스레드

 프로세스를 새로 만드는 일은 많이 무거운 일이다 때문에 새로히 생성되는 프로세스가 기존의 프로세스와 같은 일을 한다면 예를들어 웹서버에서 새로운 클라이언트가 접속하여 프로세스를 새로히 할당해야 한다면 기존의 작업과 같은 일을 하므로 하나의 프로세스의 자원을 공유하여 생성시 오버헤드가 덜한 스레드를 새로 생성하는 것이 더욱 경제적일 것이다.


장점

1. 응답성

응용프로그램을 다중스레드화 한다면 응용프로그램이 긴작업에 빠지더라도 

다른 스레드가 작업을 이어나갈 수 있으므로 사용자에 대한 응답을 증가시킨다


2. 자원공유

프로세스에서 자원을 공유하기 위해서는 메시지전달기법, 공유메모리 기법등을 사용해야만 했다

하지만 스레드는 자동적으로 그것들이 속한 프로세스의 자원을 공유하게 된다


3. 경제성 

프로세스의 생성을 위해 메모리, 자원을 할당하는 것은 시간과 비용이 많이 든다

스레드는 위에서 말한것과 같이 그들이 속한 프로세스와 자원을 공유하므로 훨씬 경제적이다.



다중처리기(다중코어)

- 코어 안에 여러 CPU칩이 존재하거나 칩안에 여러개의 코어가 존재하는것



다중처리기 시스템에서의 다중스레드 프로그래밍

- 다중스레드 프로그래밍은 다중코어를 더 효율적으로 사용할 수있고 병행 실행을 더 향상 시킬 수 있는 기법을 제공

- 단일 코어시스템상에서 병행성은 다중 스레드 프로그래밍은 단순히 스레드의 실행이 시간에 따라 교대로 실행되는 것을 의미한다 그러나 다중코어 시스템에서는 시스템이 개별 스레드를 각코어에 배정이 가능하기 때문에 병행성스레드들이 병렬적으로 실행됨을 의미 한다.