멀티 스레드 / 멀티 프로세스의 이해

프로세스

  • 정의
    • 실행 중인 프로그램을 말합니다
    • 시스템 리소스 (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