프로세스? 스레드?
컴퓨터를 하다보면 간간히 프로세스와 스레드를 접하는 경우가 많다.
이러한 것들의 개념을 한번 잡아보자!
프로세스(process)란?
- 단순히 실행 중인 프로그램(program)이라고 할 수 있다.
- 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.
스레드(Thread)란?
- 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
- 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.
- 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다.
자바에서 스레드의 생성과 실행 방법
자바에서 스레드를 생성하는 방법으론 2가지 방법이 있다.
- Runnable 인터페이스를 구현하는 방법
class ThreadWithRunnable implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()); // 현재 실행 중인 스레드의 이름을 반환함.
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
- Thread 클래스를 상속받는 방법
class ThreadWithClass extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName()); // 현재 실행 중인 스레드의 이름을 반환함.
try {
Thread.sleep(10); // 0.01초간 스레드를 멈춤.
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- 두 방법 모두 작업하고 싶은 내용을
run()
매서드에 작성하면 된다. - Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없으므로, 일반적으론 Runnable 인터페이스를 구현하는 방법으로 스레드를 생성한다.
Java 스레드의 우선순위
- 자바에서 각 스레드는 우선순위(priority)에 관한 자신만의 필드를 가지고 있다.
- 이러한 우선순위에 따라 특정 스레드가 더 많은 시간 동안 작업을 할 수 있도록 설정할 수 있다.
필드 | 설명 |
---|---|
static int MAX_PRIORITY | 스레드가 가질 수 있는 최대 우선순위를 명시함. |
static int MIN_PRIORITY | 스레드가 가질 수 있는 최소 우선순위를 명시함. |
static int NORM_PRIORITY | 스레드가 생성될 때 가지는 기본 우선순위를 명시함. |
-
getPriority(), setPriority() 매서드를 통해 스레드 우선순위를 반환하거나 변경할 수 있다.
-
스레드의 우선순위가 가질 수 있는 범위는 1 ~ 10 까지이며, 숫자가 높을수록 우선순위 또한 높아진다.
-
우선순위는 비례적인 절댓값이 아닌 상대값이다.
-
우선순위가 10인 스레드가 우선순위 1인 스레드보다 10배 빨라지는 것은 아니다.
-
단지 우선순위가 10인 스레드는 우선순위가 1인 스레듭다 좀 더 많이 실행 큐에 포함되어, 좀 더 많은 작업 시간을 할당받을 뿐이다.
-
스레드의 우선순위는 해당 스레드를 생성한 스레드의 우선순위를 상속받게 된다.
참고자료
'CS' 카테고리의 다른 글
로드밸런서(Load Balancer)란? (0) | 2023.10.13 |
---|---|
동기와 비동기 (0) | 2023.10.13 |
AXIOS가 뭐하는 녀석인지? - 비동기 통신, Promise, Ajax, HTTP, (0) | 2023.02.16 |
CDN(콘텐츠 전송 네트워크)이란? (0) | 2023.02.07 |