2023.12.29 모각코 2회차 결과

2024. 1. 2. 21:11·2023-24 동계 모각코

Thread vs Process

 

Process(프로세스)

  • 실행 중인 프로그램을 의미한다
  • 스케줄링의 대상이 되는 작업(task)와 같은 의미로 쓰인다.
  • Storage의 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고 할당된 메모리 공간으로 바이너리 코드가 올라간다.
    • 이 순간부터 process라고 불린다
  • process는 하나 이상의 스레드 구성이 된다.

 

Thread(스레드)

  • process와 유사하지만, 메모리의 많은 부분을 공유한다.
  • Thread별로 Stack과 Register를 가지고 었다.
  • Thread of Control을 줄인 말로, 제어의 흐름을 시각적으로 표현한다.

Process와 Thread의 차이

Process Thread
프로그램이 실행하기 위한 모든 자원들을 개별적으로 가지고 있어 무겁다. 개별적으로 분리가 필요한 최소한의 자원들만 가져 LWP(Light Weight Process) 라고도 하는 경량 process이다.
process별로 자체 메모리를 갖는다. process 내의 다른 thread와 메모리를 공유한다.
개별 메모리로 인해 process 간 통신이 느리다.

process간 통신을 위해서는 OS에서 제공하는 다양한 통신 기술을 이용해야한다.
공유 메모리를 이용한 직접 통신이 가능해 thread간 통신이 빠르다.
Multi process 지원 시스템에서는 process context switching 시 이전 process의 메모리 및 스택 정보를 storage에 저장하는 swapping이 발생할 수 있으며, 이는 메모리에 있던 정보를 storage에 옮기거나 storage에 저장된 정보를 메모리에 올리는 작업이 수행되므로 비용이 많이 든다. thread간 context 전환은 공유 메모리로 인해 비용이 저렴하다.
구성 요소에 대한 여러 process가 있는 application은 메모리가 부족할 때 더 나은 메모리 활용도를 제공할 수 있다.

Application의 비활성 process에 낮은 우선순위를 할당할 수 있다. 그러면 이 유휴 process는 storage로 swapping될 수 있다.
메모리가 부족한 경우 Mulit-threaded application은 메모리 관리를 위한 어떠한 조항도 제공하지 않는다.

 

 

 


 

Single Thread

  • Main 스레드에서 작업 진행, 작업은 순차적으로 진행됨
  • 하나의 프로세스에서 오직 하나의 스레드로만 실행
    • 단일 레지스터와 스택으로 구성
    • Context Switching 작업을 요구하지 않음
    • 동시성 제어에 대한 처리를 신경쓰지 않아도 됨

 

Multi Thread

  • 프로그램 내에서 두 개 이상의 동작을 동시에 실행
    • 프로세서의 활동을 극대화
    • 두 개가 동작을 동시에 실행
  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유
    • 자원의 생성과 관리의 중복성 최소화
    • 수행 능력 향상

 


Thread Class

 

자바에서 Thread Class를 이용한 thread를 구현하기 위해서 1초마다 횟수를 1씩 증가시키는 Counter class를 정의하고, Thread Class를 이용하여 해당 Counter가 thread로 동작하도록 하는 ThreadCounter class를 정의해보았다.

 

 

Counter Class
public class Counter{
    int max = 0;
    int count = 0;
    String name;
    public Counter(String name, int max) {
        this.max = max;
        this.name = name;
    }

    public void run() {
        while(count < max) {
            count ++;
            System.out.println(name + " : " + count);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Counter c1 = new Counter("ThreadCounter1", 10);
        Counter c2 = new Counter("ThreadCounter2", 10);

        c1.run();
        c2.run();

    }
}

 

 

 

ThreadCounter Class
public class ThreadCounter extends Thread {
    int max = 0;
    int count = 0;
    String name;
    public ThreadCounter(String name, int max) {
        this.max = max;
        this.name = name;
    }
    
    @Override
    public void run() {
        while(count < max) {
            count ++;
            System.out.println(name + " : " + count);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        ThreadCounter c1 = new ThreadCounter("ThreadCounter1", 10);
        ThreadCounter c2 = new ThreadCounter("ThreadCounter2", 10);

        c1.start();
        c2.start();

    }
}

 

 

 

Counter Class vs ThreadCounter Class

  • Counter Class
    • Thread Class를 extends하지 않기 때문에 별도로 run() 메소드를 구현하고 main에서도 run()으로 실행한다.
    • 2개 이상의 instance를 실행 시 먼저 실행시킨 Counter가 끝까지 동작 후 다음 Counter가 동작한다.
  • ThreadCounter Class
    • Thread Class를 extends하였기 때문에 @Override키워드를 이용해 Thread class의 run() 메소드를 재정의 한다.
    • 2개 이상의 instance를 실행 시 각각의 Counter가 동시에 번갈아가면서 동작한다.

 

 

'2023-24 동계 모각코' 카테고리의 다른 글

2024.01.31 모각코 4회차 결과  (3) 2024.02.07
2024.01.05 모각코 3회차 결과  (1) 2024.01.07
2023.12.29 모각코 2회차 계획  (2) 2024.01.02
2023.12.26 모각코 1회차 결과  (2) 2023.12.27
2023.12.26 모각코 1회차 계획  (2) 2023.12.27
'2023-24 동계 모각코' 카테고리의 다른 글
  • 2024.01.31 모각코 4회차 결과
  • 2024.01.05 모각코 3회차 결과
  • 2023.12.29 모각코 2회차 계획
  • 2023.12.26 모각코 1회차 결과
폐프
폐프
  • 폐프
    폐프의삶
    폐프
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 2023 하계 모각코 (12)
      • 2023-24 동계 모각코 (8)
      • 2024 SW ACADEMY (5)
      • Spring (1)
      • JPA (0)
      • JAVA (2)
      • Database (10)
      • OS (5)
      • Network (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
폐프
2023.12.29 모각코 2회차 결과
상단으로

티스토리툴바