Thread?
프로세서보다 더 작은 단위의 CPU 활용단위이다.
멀티쓰레드
멀티 쓰레드는 각각의 프로세서들이 독립적으로 실행되야하기 때문에 레지스터 , 스택 등이 각각 따로 존재한다.
그 외 코드 , 데이터, 파일들은 쓰레드끼리 공유하기 때문에 메모리 사이즈가 작아지고, 데이터 공유가 쉽다.
여러개의 Task를 운영가능하고 빠르게 문제해결가능하다.
또한 소스 공유 측면에서도 뛰어나다.
별도의 메모리 공간을 가지고 메시지 패싱들의 매커니즘을 이용해 데이터를 주고 받지만 멀티 쓰레드는 같은 프로세서 내의 쓰레들끼리 자원 공유하기 때문이다.
메모리 할당방면에서도 장점이 존재한다.,
멀티 프로세서는 프로세서들별로 메모리를 할당해야 하지만, 쓰레드는 프로세서 내에 쓰레드가 만들어지기 때문에 별도로 메모리를 할당할 필요가 없다.
쓰레드의 구현과 실행
상속받는 바업과 인터페이스르 구현하는 방법이 있다.
보통 Runnable 인터페이스를 구현하는 방법이 일반적이다.
재사용성이 높고 코드의 일관성을 유지가능하고, thread클래스를 상속받을 경우 다른 클래스를 상속받을 수없기때문이다.
Runnable 인터페이스 구현
runnable 인터페이스는 오로지 run()만 정의되어있는 간단한 인터페이스 이다.
이 인터페이스를 구현하기 위해서 해야할일은 작업하고자 하는 내용으로 run의 몸통만들어주는 것이다.
runnable 인터페이스를 구현한 경우, runnable 인터페이스를 구현한 클래스의 인스턴스를생성한 다음,
이 인스턴스를 thread클래스의 생성자의 매개변수로 제공해야한다.
쓰레드 실행- start
쓰레드를 생성했다고 해서 자동으로 실행되는 건 아니다
start()를 호출해야만 쓰레드가 실행된다.
싫생대기 상태에 있다가 자신의 차례가 되어야 실행된다.
주의할점은 한번 실행이 종료된 쓰레드는 다시 실행할 수 없다.
즉 하나의 쓰레드에 대해 sratr()가 한번만 호출될 수 있다는 뜻이다.
쓰레드의 우선순위
쓰레드는 우선순위라는 속성 갖고있다. 값에 따라 쓰레드가 얻는 실행시간이 달라진다.
쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 서로 다르게 지정하여 특정 쓰레드가 더 많은 작업시간을 갖도록 할 수 있다.
쓰레드의 생성부터 소멸까지의 모든 과정
1. 쓰레드를 생성 -> start() 호출 : 바로 실행되는게 아니라, 실행대기열에 저장되어 자신의 차례가 될때까지 기다려야한다. (큐 구조로, 먼저 들어온 쓰레드가 먼저실행)
2. 실행 대기 상태에 있다가 자신의 차례가 되면 실행상태가 된다.
3. 주어진 실행시간이 다되거나 yield()를 만나면 다시 실행대기 상태가 되고 다음차례의 쓰레드가 실행상태가 된다.
4. suspend() . sleep() . wait() . join()에 의해 일시정지 상태 될수 있다.
5/ 지정된 일시정지시간이 다되거나, notify(), resume(), interrupt()가 호출되면서 일시 정지상태를 벗어나 다시 실행대기열에 저장되어 자신의 차례를 기다리게 된다.
6/ 실행을 모두 마치거나, stop() 이 호출되면 쓰레드는 소멸된다.
sleep : 일정시간 동안 쓰레드르 멈추게 한다.
yield : 쓰레드 자신에게 주어진 실행ㄱ시간을 다음 차례의 쓰레드에게 양보한다.
예를 들어, 스케쥴러에 의해 1초의 실행시간을 할당받은 쓰레드가 0.8초의 시간동안 작업한 상태에서 yield 가 호출되면,ㅡ 나머지 0.2초는 포기하고 실행대기 상태가 된다.
join : 쓰레드 자신이 하던 작업을 잠시 멈추고, 다른 쓰레드가 지정된 시간동안 작업을 수행하도록 할때 사용
시간을 지정하지 않을 경우, 해당 쓰레드가 작업을 모두 마칠때까지 기다리게 된다.
작업중에 다른 쓰레드의 작업이 먼저 수행되어야할 필요가 있을 때 join()을 사용한다.
sleep()과는 다른 점은 현재 쓰레드가 아닌 특정 쓰레드에 대해 도작한다.
fork ; 해당 작업을 쓰레드 풀의 작업 큐에 넣는다.
즉 작업을 쓰레드의 작업 큐에 넣는다. 작업은 더이상나눌 수 없을때까지 나뉜다.작업의 결과는 join을 호출해서 얻을 수 있다.
'운영체제 ( OS )' 카테고리의 다른 글
[운영체제 ] 6주차 정리본 (0) | 2021.04.26 |
---|---|
[운영체제 ] 5주차 정리본 (0) | 2021.04.26 |
[운영체제 ] 3장 정리본 (0) | 2021.04.26 |
[운영체제] Thread 정리본 (0) | 2021.04.26 |
[운영체제] [ 1주차 내용 정리 전 필기본] (0) | 2021.03.25 |