본문 바로가기
JAVA

[JAVA] 프로세스와 스레드, 시스템 발전 과정(멀티 프로그래밍, 멀티태스킹)

by 정공자씨 2024. 4. 29.

 

 

프로그램과 프로세스

 

프로그램

  • 어떤 작업을 위해 실행할 수 있는 파일의 형태로 하드디스크에 저장된 것
    • 아직 파일이 실행된 상태는 아니기 때문에 정적인 상태
    • 프로그램은 코드 덩어리 자체

 

프로세스

  • 프로그램이 실행된다는 것은
    • 하드 디스크에 존재하던 실행 파일이 시스템 메모리에 올라간다(로드)는 것이고
    • 프로그램이 운영체제(OS)에 의해 CPU를 할당 받고
    • CPU에 의해 프로그램이 실행되고 있는 상태를 말함
  • 코드 덩어리인 프로그램을 실행 시켜서
    • 정적인 프로그램이 동적으로 변하여 프로그램이 실행되는 상태를 말함
  • 프로세스는 자원(메모리, CPU 등)과 쓰레드로 구성됨
- 프로그램은 정적
- 프로세스는 동적, 프로그램이 실행된 것이므로 동적인 상태

 

 

멀티 프로세스

  • 1개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것
  • 여러 개의 프로세스를 메모리에 생성할 수 있음

 

 

 

 

 

시스템의 발전 과정 : 스레드가 탄생하는 과정

단일 프로세스

  • 과거에는 1개의 컴퓨터에서 1개의 프로그램만 실행이 가능했음
  • 다른 프로그램을 실행해야 하면, 현재 프로그램을 종료하고 실행해야 했음
  • 만일 프로세스1과 프로세스2를 순차적으로 실행하는 경우에
    • CPU가 프로세스1 작업을 하다가  I/O(입력, 출력) 상황이 발생하면
    • 해당 입출력이 끝날때까지 CPU는 프로세스1의 작업을 멈추고 대기하여야 하는 상황이 발생함
[ 실행 상태의 프로세스 상태가 변하는 경우 ]

1. 프로세스를 실행하다가 I/O(입력, 출력) 명령이 발생하는 경우, 프로세스는 대기 상태로 전환됨. 즉 프로세스는 I/O 요청이 완료되기를 기다려야 함

2. I/O(입력, 출력)이 완료되면, 프로세스는 준비 상태로 전환

 

 

멀티 프로그래밍

  • 이러한 문제를 해결하고자
    • 여러 개의 프로그램을 메모리에 올려놓고, 1개의 CPU가 여러 개의 프로세스를 돌아가면서 처리함
    • 1개의 CPU가 2가지 이상의 프로그램을 실행시키기 위한 방법으로 병행 처리를 생각함
    • 즉, CPU가 여러 프로세스를 순차적으로 처리함
  • 만일 프로세스1과 프로세스2를 순차적으로 실행하는 경우에
    • 만일 CPU가 프로세스1 작업을 하다가  I/O(입력, 출력) 상황이 발생하는 경우,
    • 해당 입출력이 끝날때까지 CPU는 프로세스1의 작업을 멈추고 대기하는 것이 아니라 프로세스2 작업을 시작하고
    • 다시  I/O(입력, 출력) 상황이 발생하면, 프로세스1 작업을 시작함
  • 즉, 어떤 프로세스가 대기를 해야 하면, 운영체제(OS)는 CPU를 회수하여 다른 프로세스에 할당함
[ 병행 처리 ] 
프로세스A와 프로세스B를 처리해야 할 때

[ 병렬 ] 

A와 B의 일을 동시에 실행하는 성질

[ 병행 ] 
- A를 했다가 B를 했다가 순차적으로 이것저것 처리함
- 1개의 CPU가 여러 프로세스를 번갈아가며서 조금씩 처리하여, 컴퓨터가 여러 작업을 동시에 실행하는 것처럼 보이게 만듦 

 

 

멀티 태스킹

  • 멀티 프로그래밍에도 한계점이 있었는데
    • 1개의 프로세스가 CPU를 사용하는 시간이 길어지면, 다른 프로세스는 계속 대기를 해야한다는 문제점이 발생하고
    • 어느 한 프로세스가 모두 실행되어야 다음 프로세스가 실행될 수 있는 한계가 있음
    • 이를 해결하고자 멀티 태스킹이라는 개념이 나옴
  • 멀티태스킹은
    • 프로세스 1개가 CPU를 연속적으로 선점하는 것을 막고, 모든 프로세스가 공평하게 작업을 수행하기 위해
    • 1개의 프로세스가 CPU를 사용할 때 아주 짧은 시간(quantum)만 실행되도록 하여
    • 각 프로세스가 아주 작은 단위로 번갈아가면서 처리하면서, 작업 응답 시간을 최소화 함
    • 이때에 잘게 나누어진 프로세스끼리 작업이 교환되는 것이 문맥 교환(context-switching)
  • 마치 여러 프로세스가 동시에 실행되는 것처럼 느껴지지만, 하나의 프로세스가 동시에 여러 작업을 수행하지 못하는 한계가 있음

 

 

프로세스의 한계

  • 프로세스는 각기 다른 독립적인 메모리 공간을 할당 받아서 동작하기 때문에 프로세스끼리의 데이더의 공유가 까다로움

 

 

 

 

 

스레드(Thread)

등장

  • 하나의 프로세스 안에서 여러 작업이 동시에 진행되기도 하는데,
  • 이처럼 1개의 프로세스 내에서 여러 개의 작업을 처리하기 위해서 스레드(thread)가 등장
  • 채팅 앱을 실행(프로세스)하여
    • 사용자가 메시지를 입력하는 중(스레드1)에
    • 상대방의 새로운 메시지를 계속 받을 수 있고(스레드2)
    • 이전에 메시지로 보낸 동영상을 다운 받을 수도 있음(스레드3)
[ 멀티 스레드(multi-thread) ]
하나의 프로세스 내에서 2개 이상의 쓰레드가 동시에 작업을 수행하는 것

 

 

개념

  • 하나의 프로세스 내에서 실행되는 세부 실행 단위
  • 실행 흐름의 단위를 두어, 작업을 효율적으로 하고자 하는 것

 

 

특징

  • 1개의 프로세스는 반드시 1개 이상의 스레드를 가짐 
    • 일반적으로 1개의 프로그램은 1개 이상의 프로세스를 가지고
    • 프로세스를 생성하면 기본적으로 1개의 메인 스레드(main thread)가 생성됨
  • 스레드는 CPU에서 실행되는 단위
    • 과거에는 프로세스가 CPU에서 실행되는 단위었다면
    • 이제는 스레드가 CPU에서 실행되는 단위
  • 같은 프로세스 내의 스레드끼리는 문맥 교환(context switching)이 가벼움
  • 스레드들은 자신이 속한 프로세스의 메모리 영역을 공유하여
    • 데이터의 공유가 쉬움
프로세스 스레드
각 프로세스마다 메인 메모리 공간을 부여받음 스레드 간에 메인 메모리 공간 공유

 

 

 

 

 

메인 스레드(Main Thread)

- 자바 프로그램에는 최소 1개의 스레드가 있는데, 이것이 메인 스레드
- JVM이 자동으로 생성하는 스레드
  • 자바의 프로그램의 시작점은 main() 메서드이고
    • 이 main() 메서드를 수행되도록 하는 것이 스레드인데
    • 이 쓰레드가 메인 스레드
  • 모든 자바 프로그램은 JVM(자바 머신 러닝) 위에서 동작하는데,
    • 이  JVM은 프로그램의 시작점인 main() 메서드가 있는 클래스를 찾고 메인 스레드를 생성한 후에
    • 메인 스레드에서 main() 메서드를 호출하여, 작업이 수행되도록 함
  • 따라서, 메인 스레드는 JVM에 의해 자동으로 생성됨

 

 

 

 

JVM이  자동으로 생성하는 메인스레드(Main Thread) 이외에 추가로 사용자 정의 스레드를 생성하여 구현해보자

 

 

[JAVA] 자바 스레드 생성(Thread, Runnable)

JAVA에서의 쓰레드메인 쓰레드(Main Thread)자바 프로그램에..

growingsoksok.tistory.com

 

 

 

 

 

 

출처

 

[Java Study] - 멀티 쓰레드(쓰레드 생성과 실행) :: 코니의 개발 노트 (tistory.com)

 

https://hongong.hanbit.co.kr/cpu%EA%B0%80-%EB%A9%80%ED%8B%B0%ED%83%9C%EC%8A%A4%ED%82%B9%EC%9D%84-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-vs-%EC%8A%A4%EB%A0%88%EB%93%9C/

 

https://velog.io/@yukicow/%EC%8A%A4%EB%A0%88%EB%93%9C%EC%99%80-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

 

https://engineerinsight.tistory.com/281#%E2%9C%94%EF%B8%8F%C2%A0%EB%A9%80%ED%8B%B0%ED%83%9C%EC%8A%A4%ED%82%B9-1

 

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98_%ED%95%9C%EA%B3%84