프로세스
- 정의
- 실행 중인 프로그램을 말합니다
- 시스템 리소스 (CPU , 메모리, I/O 장치 등) 와 데이터를 독립적으로 보유한 작업 단위임
- 프로세스는
각각 독립적인 메모리 공간
을 가집니다.
스레드
- 정의
- 프로세스 내에서 실행되는 흐름의 단위입니다
- 프로세스 내부의 코드, 데이터 및 시스템 리소스를 공유합니다
- 스레드는
스택만 독립적으로 가지며, 나머지 힙, 정적 영역은 같은 프로세스 내의 다른 스레드와 공유
합니다
멀티프로세스 vs 멀티 스레드
멀티프로세스
- 각 프로세스는 독립적인 T 메모리를 가진다.
- 프로세스 간 메모리 공간을 직접 공유 불가능.
- 메모리 사용량이 큼
멀티스레드
모든 스레드는 같은 메모리 공간을 공유
하며, 스택만 분리
스태택 영역, 힙 영역은 모든 스레드에 의해 공유
메모리 사용량
이 멀티프로세스에 비해적음
.
웹 프로그래밍에서의 사용
자바에서 서블릿은 요청시마다 스레드를 실행
한다.
- CGI 처럼 요청마다 프로세스를 생성하는 방식보다 효율적이다.
멀티 스레드의 문제점 : 전역 변수 사용
- 여러 스레드가 동시에 전역 변수에 접근하면
예상치 못한 문제가 발생할 수 있다.
- 스레드의 안정성이 깨질 위험이 있으며,
- 문제 해결을 위해
thread lock
을 할 수 있지만, 이러면 멀티 스레드의 장점 중에 하나인동시성
이 사라지게 된다.
- 동시성 문제가 발생하게 되어버린다.
public class Start6 extends Thread {
static int share;
public static void main(String[] args) {
Start6 t1 = new Start6();
Start6 t2 = new Start6();
t1.start();
t2.start();
}
@Override
public void run() {
//실행되는 쓰레드의 이름을 출력합니다.
for(int count = 0; count < 10; count++) {
// System.out.println(getName());
System.out.println(share++);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
- 결과
1
0
2
3
4
4
5
6
7
8
9
10
11
11
12
12
13
14
16
15
- 분명히 원래 대로라면, 1 2 3 4 … 19 까지가 출력되어야한다.
- .. 이해가 안되는데?
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
변수에 저장하는 값 자체는 어디에서 오게 되는걸까? (0) | 2023.08.19 |
---|---|
필드 vs 속성 | 함수 vs 메서드 (0) | 2023.08.18 |
변수와 메모리: 전역 변수 쓰지 말라니까요! (0) | 2023.08.17 |
메서드 호출과 메모리: 메서드 스택 프레임2 (0) | 2023.08.17 |
지역 변수와 메모리 : 스택 프레임에 갇혔어요! (0) | 2023.08.17 |