It's going to be one day 🍀

안녕하세요! 매일 매일 공부하려고 노력하는 백엔드 개발자 지망생의 공부 흔적입니다.

CS/운영체제

[운영체제 교육] 스레드 (Thread)

2jin2 2024. 2. 21. 13:07

프로세스와 스레드

- 프로세스 (Process) : 운영체제로부터 자원을 할당받은 작업의 단위

- 스레드 (Thread) : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

 

프로그램과 프로세스

프로세스는 프로그램을 실행하여 돌아가고 있는 상태를 뜻한다. (실행 중인 프로그램)

 

스레드 (Thread)

하나의 프로세스 안에서 진행되는 작업들을 의미함.

작업 하나당 하나의 스레드

이렇게 프로세스 안에서 수행되는 작업을 스레드라고 하고, 스레드가 여러 개 있다면 다중 스레드라고 함.

프로세스안에서 스레드가 작동되고 있는 것!

 

프로세스 내부 구조

프로그램을 실행하면 운영체제가 메모리에 프로세스를 할당한다. 메모리를 자세히 살펴보면?

이렇게 크게 4가지 영역으로 나뉨.

- Code 영역 : 프로그래머가 작성한 소스코드가 저장되어 있음. 기계어 형태로 저장됨.

- Data 영역 : 코드가 실행되면서 사용하는 전역 변수, static 변수들이 저장되어 있음.

- Stack 영역 : 함수가 호출되면 Stack 영역에 할당되며 함수가 종료되면 소멸함. 함수에서 사용하는 지역 변수도 함께 저장됨. 이때 프로세스에 할당된 메모리보다 Stack 영역을 많이 사용하면 stack overflow 에러 발생.

     -> 하나의 스레드 안에는 하나의 Stack 영역을 사용함.

- Heap 영역 : 생성자, 인스턴스, (+배열) 과 같은 동적으로 할당되는 데이터들을 저장함.

 

스레드 내부 구조

스레드는 프로세스가 할당받은 자원을 이용함. 여러 개의 스레드가 있다면 스레드끼리 서로 자원을 공유하기 때문에 동시 작업이 가능함!

이렇게 스레드는 Stack 영역만 별도로 사용하고 Code, Data, Heap은 다른 스레드들과 공유함.

 

-> Java의 JVM의 프로세스, 스레드와 비교해보기

 

[Java] 프로세스와 스레드 - <1> JVM 메모리 관점에서 분석

프로세스와 스레드 프로세스는 프로그램이 실행된 상태를 의미 합니다. 스레드는 프로세스보다 작은 최소 실행 단위입니다. 모든 프로세스는 최소 하나의 실행단위 스레드를 가집니다. JVM에서

jerry92k.tistory.com

 

자바에서 직접 스레드를 생성할 수 있음

- Thread 클래스 상속

class MyThread extends Thread {
    public void run() {
        // 스레드가 수행할 작업 정의
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 스레드 시작
    }
}

 

- Runnable 인터페이스 구현 

class MyRunnable implements Runnable {
    public void run() {
        // 스레드가 수행할 작업 정의
    }
}

public class RunnableExample {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start(); // 스레드 시작
    }
}

-> 직접 작성하는 일이 많지는 않음. 참고만!

+) synchronized 실습을 통해 설명했음. 나중에 다시 개념 정리하기