본문 바로가기

CS/오퍼레이팅 시스템

17. 스레드

 

 

* 스레드를 도입하게 된 이유

병렬적으로 수행되어야 할 프로세스가 많다

많은 프로그램들이 serialize 되지 않고 프로세스를 수행해야한다

- serialized : 스토리지 문맥에서 데이터구조나 객체 상태를 동일하거나 다른 환경에 저장하고 나중에 재구성할 수 있는 포멧으로 변환하는 것

 

웹 서버에서 잘 확인해볼 수 있음

웹 서버는 여러 요청을 받아서 병렬적으로 처리해야 한다.

클라이언트A가 요청을 보내면 서버는 fork함수로 그 요청을 처리할 프로세스를 생성해야하고

이 후에 클라이언트 B가 또 요청을 하면 그 요청을 처리하기 위한 또다른 프로세스를 생성해야한다.

지속적으로 프로세스를 생성해야하지만 fork 함수를 메모리를 많이 필요하며 computation양도 많다.

 

따라서 thread라는 오버헤드가 작은 프로그래밍 방법을 도입하게 됨

 

thread는 프로세스 내에서 실행되는 object를 말함 

동일한 프로그램이니까 코드데이터를 공유함- shared resources

별도의 실행객체기 때문에 계속 바뀌는 stack, register 부분은 공유안하고 별도로 가짐

=> 리소스 사용의 최소화

세개의 실행객체가 있는데 하나의 프로세스가 그 세개의 실행 객체를 병렬적으로 수행

 

*장점

- 여러개의 thread 수행 중에 한개가 block되어도 나머지 스레드가 수행이 가능하여 응답성이 좋다

- 리소스를 공유해서 효과적으로 사용할 수 있다

- 프로세스 생성보다 스레드 생성이 30배 빠르며, 문맥전환도 5배 빠르다

- 멀티프로세서 아키텍처를 이용할 수 있다