Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자바 #JAVA
- 믹스인
- 자바 #java #상속
- java #자바 #상속 #오버라이딩
- 해쉬맵
- java #객체지향 #자바
- 람다
- java # for문 #반복문
- Arrays.toString()
- 스프링 #Spring #spring #입문서
- 자바 #변수 #java
- overring
- java #continue #반복문
- 메서드
- java #중첩반복문 #구구단
- HashMap
- java
- 이펙티브자바
- 인텔리제이
- 자바
- java #조건문 #if문
- IntelliJ
- Math.pow()
- Math.sqrt()
- Mixin
- EffectiveJava
- java #조건문 #if조건문 #if
- 객체지향프로그램
- java #자료형
- java #자바 #상속
Archives
- Today
- Total
산으로 가자▲
쓰레드(Thread)란? 본문
쓰레드(Thread)란 무엇인가?
- 쓰레드란 프로그램(프로세스) 실행의 단위이며
하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다. - 하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다.
- 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며
실행 상태가 변할때마다 쓰레드 문맥교환(context switching)을 수행한다. - 각 쓰레드별로 자신만의 스택과 레지스터를 가진다.
- 한순간에 하나의 쓰레드만이 실행 가능하다.
프로세스와 쓰레드의 차이
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
- 프로세스는 실행 중인 프로그램으로
디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. - 하지만 프로세스 생성은 많은 시간과 자원을 소비한다.
- 쓰레드는 프로세스의 실행 단위라고 할 수 있다.
- 한 프로세스 내에서 동작되는 여러 실행 흐름으로
프로세스 내의 주소 공간이나 자원을 공유할 수 있다. - 이 경우 각각의 쓰레드는 독립적인 작업을 수행해야 하기 때문에 각자의 스택과 PC 레지스터 값을 갖고 있다.
스택을 쓰레드마다 독립적으로 할당하는 이유
- 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을
저장하기 위해 사용되는 메모리 공간이므로
스택 메모리 공간이 독립적이라는 것은
독립적인 함수 호출이 가능하다는 것이고
이는 독립적인 실행 흐름이 가능하게 한다. - 따라서 독립적인 실행 흐름을 위한 최소 조건으로 독립된 스택을 할당한다.
PC Resister를 쓰레드마다 독립적으로 할당하는 이유
- PC 값은 쓰레드가 명령어의 어디까지 수행하였는지를 나타나게 된다.
- 쓰레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다.
그렇기 때문에 명령어가 연속적으로 수행되지 못하고
어느 부분까지 수행했는지 기억할 필요가 있다. - 따라서 PC 레지스터를 독립적으로 할당한다.
쓰레드(Thread)의 장점
- 쓰레드는 프로세스보다 생성 및 종료시간, 쓰레드간 전환시간이 짧다.
- 쓰레드는 프로세스의 메모리, 자원등을 공유하므로 커널의 도움없이 상호간에 통신이 가능하다.
쓰레드 동기화 방법의 종류
- Mutex / Semaphore / Monitor
공통점은 세가지 모두 운영체제의 동기화 기법이라는 것이다. - 뮤텍스(Mutual Exclusion)
- 쓰레드의 동시 접근을 허용하지 않는다는 의미.
- 뮤텍스의 쓰레드 동기화 방법은 임계영역에 들어가기 위해 이 뮤텍스를 가지고 있어야 들어갈 수 있다.
예) 일종의 자물쇠와 같은 역할을 한다.
임계영역에 들어간 쓰레드가 뮤텍스를 이용해 임계영역에서 본인이 나올때까지 다른 쓰레드가 못들어오게 내부에서 자물쇠로 잠근다.
- 세마포어(Semaphore)
- 세마포어 역시 뮤텍스와 비슷한 역할을 하지만
세마포어는 동시 접근 동기화가 아닌 접근 순서 동기화에 더 관련있다.
- 세마포어 역시 뮤텍스와 비슷한 역할을 하지만
- 모니터(Monitor)
- Mutex(Lock)와 Condition Variables(Queue라고도 함)을 가지고 있는 Synchronization 메카니즘이다.
- 우선 뮤텍스 / 모니터 / 세마포어는 개념적으로 차이가 있다.
- 전자(뮤텍스,모니터)는 상호 배제를 함으로써 임계구역에 하나의 쓰레드만 들어갈 수 있다.
- 후자(세마포어)는 하나의 쓰레드(binary semaphore)만 들어가거나
혹은 여러 개의 쓰레드(counting semaphore)가 들어가게 할 수도 있다.
'Java' 카테고리의 다른 글
해시맵(HashMap) (1) | 2022.10.10 |
---|---|
객체지향(OOP) (0) | 2022.10.08 |
자바 믹스인(mixins)이란? (0) | 2022.10.08 |
생성자에 대해 알아봅시다 (constructor) (0) | 2022.10.06 |
인스턴스 생성과 힙 메모리 (heap memory) (0) | 2022.10.06 |