* 스레드를 도입하게 된 이유
병렬적으로 수행되어야 할 프로세스가 많다
많은 프로그램들이 serialize 되지 않고 프로세스를 수행해야한다
- serialized : 스토리지 문맥에서 데이터구조나 객체 상태를 동일하거나 다른 환경에 저장하고 나중에 재구성할 수 있는 포멧으로 변환하는 것
웹 서버에서 잘 확인해볼 수 있음
웹 서버는 여러 요청을 받아서 병렬적으로 처리해야 한다.
클라이언트A가 요청을 보내면 서버는 fork함수로 그 요청을 처리할 프로세스를 생성해야하고
이 후에 클라이언트 B가 또 요청을 하면 그 요청을 처리하기 위한 또다른 프로세스를 생성해야한다.
지속적으로 프로세스를 생성해야하지만 fork 함수를 메모리를 많이 필요하며 computation양도 많다.
따라서 thread라는 오버헤드가 작은 프로그래밍 방법을 도입하게 됨
thread는 프로세스 내에서 실행되는 object를 말함
동일한 프로그램이니까 코드데이터를 공유함- shared resources
별도의 실행객체기 때문에 계속 바뀌는 stack, register 부분은 공유안하고 별도로 가짐
=> 리소스 사용의 최소화
세개의 실행객체가 있는데 하나의 프로세스가 그 세개의 실행 객체를 병렬적으로 수행
*장점
- 여러개의 thread 수행 중에 한개가 block되어도 나머지 스레드가 수행이 가능하여 응답성이 좋다
- 리소스를 공유해서 효과적으로 사용할 수 있다
- 프로세스 생성보다 스레드 생성이 30배 빠르며, 문맥전환도 5배 빠르다
- 멀티프로세서 아키텍처를 이용할 수 있다
'CS > 오퍼레이팅 시스템' 카테고리의 다른 글
19. 멀티스레딩 모델 (0) | 2020.04.09 |
---|---|
18. 멀티코어 프로그래밍 (0) | 2020.04.09 |
16. IPC 프로세스간 커뮤니케이션 : message passing (0) | 2020.04.09 |
15. IPC 프로세스간 커뮤니케이션 : shared memory, producer-consumer문제 (0) | 2020.04.09 |
14. 고아프로세스와 좀비프로세스 (0) | 2020.04.09 |