01.thread의 개념
스레드 개념 이해 하기
1.다중작업(멀티 태스킹, 멀티 프로세스) 환경과 Single CPU
OS: 사용자가 실행을 하면 프로그램을 찾아 작동 시킨다
프로그램은 보조 기억장치에 있다
영구적으로 저장 할 수 있는 보조 기억장치에 있는 것을 load해서 프로그램을 메모리에 오르게 하고 그 메모리를 프로세스라고 한다
동작 중인 상태의 프로그램을 프로세스 라고 한다
하나/다중의 프로그램이 동시에 돌아 갈 수 있는데 이때 웹브라우저/ 워드프로세스/ mp3등등 동사에 사용 할 수 있다
동시에 프로세스 동작한다= 자원을 나눠 사용하고 있다 멀티 프로세스 가능 (멀티 테스킹)
os가 시분할을 통한 동시 실행을 지원한다
작업하다가 멈춘 시점을 지정해야하기 때문에 (책갈피) 프로세스마다 문맥객체를 가져야한다: context
- context 스위칭
여러가지의 문맥을 왔다갔다 하면서 진행이 된다 –> 문제 발생
2.자식프로세스를 많이 가지는 프로세스
웹브라우저
검색
다운로드
다운로드
동기식 실행
메인 흐름
메인 함수가 끝나야 다운로드를 실행 할 수 있는데 이것을 동기식 실행이라고 한다 (순서를 기반)
동기식으로 진행 할 경우 메인함수가 검색을 하는 동안 묶여버린다
동기식으로 실행하지 않기 위해서 예전에는 실행이 오래걸리는것은 fork api를 이용해서 따로 만들었다
프로세스 수가 많아지면 시간을 나눠 써야된다 성능저하가 발생하게 된다 -> 자식프로세스의 형평성의 문제
-
형평성을 맞추자
-
스위칭에 대한 시간을 줄여보자
-
자식프로세스와 부모 프로세스간의 데이터 공유
현실적인 시분할방법이 나온다
프로세스 문맥 스위칭을 대신 할 대안 이 필요하다
—->스레드를 사용하는 이유
3.프로세스의 문맥 스위칭에서 쓰레드의 문맥 스위칭으로
웹브라우저 프로세스
파일 다운로드 프로세스
파일 다운로드 프로세스
프로세스가 형평성있게 분배 될려면 시간분할이 더 작은 단위인 계층화가 일어나게 해야한다 => ‘스레드’
그 프로세스 안에서 시간을 분할하는단위의 스레드로 할당된다 프로세스 안에서 비동기가 발생한다 (따로 안함)
흐름만 나누는것에 포커스가 나눠져서 지역변수를 저장할 수 있는 스택 코드의 흐름만 나누는 리디렉션 포인터와 두개의 영역만 스위칭 되면 된다
데이터와 힙영역은 공유가 된다
- 형평성 문제 해결
- 공유를 편하게 할 수 있다
- 비용이 적어졌다
- 경량화되어있다
댓글남기기