728x90

 

💡 프로그램 vs 프로세스 vs 스레드의 차이 및 개념

 



프로그램(Program), 프로세스(Process), 스레드(Thread)는 컴퓨터에서 실행되는 작업 단위를 나타내는 용어입니다. 각각의 개념을 설명해보겠습니다:

  1. 프로그램(Program) : 프로그램은 실행 가능한 명령어들의 집합으로, 파일 시스템에 저장되어 있습니다.
    • 일반적으로 실행 파일 또는 실행 가능한 코드를 의미하며, 컴퓨터가 작업을 수행하는 데 필요한 지침을 포함합니다.
    • 예를 들어, 워드프로세서, 웹 브라우저, 게임 등은 각각 하나의 프로그램으로 볼 수 있습니다.

  2. 프로세스(Process) : 프로세스는 실행 중인 프로그램의 인스턴스로, 컴퓨터의 메모리에서 실행되고 있는 작업입니다.
    • 각각의 프로세스는 자체적인 메모리 공간, 자원 및 실행 상태를 가지고 있습니다.
    • 프로세스는 운영체제에 의해 생성되며, 각각 독립적으로 실행되어 다른 프로세스와는 분리되어 작동합니다.
    • 각 프로세스는 독립적인 실행 흐름을 가지며, 자신의 데이터와 자원에 접근할 수 있습니다.
    • 예를 들어, 워드프로세서가 실행 중일 때 해당 프로세스는 컴퓨터의 메모리에 로드되어 실행되고 있습니다.

  3. 쓰레드(Thread) : 스레드는 프로세스 내에서 실행되는 작은 작업 단위입니다.
    • 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이러한 스레드들은 동시에 실행될 수 있습니다.
    • 스레드는 프로세스 내의 메모리와 자원을 공유하면서 실행됩니다.
    • 여러 스레드가 동시에 작업을 수행하므로, 프로세스의 성능을 향상시키고 동시성을 제공합니다.
    • 예를 들어, 워드프로세서의 프로세스 내에서 스레드를 사용하여 동시에 문서를 저장하거나 인쇄할 수 있습니다.

요약하자면, 프로그램은 실행 가능한 명령어의 집합이고, 프로세스는 실행 중인 프로그램의 인스턴스입니다.
프로세스는 독립적으로 실행되는 작업을 의미하며, 각각 자체적인 메모리와 자원을 가지고 있습니다.
쓰레드는 프로세스 내에서 실행되는 작은 작업 단위로, 프로세스의 자원을 공유하면서 동시에 실행될 수 있습니다.
쓰레드를 사용하여 프로세스의 성능을 향상시키고 동시성을 제공할 수 있습니다.

쓰레드란 ?


쓰레드(thread)는 프로그램 내에서 동시에 실행되는 작업의 단위
입니다. 쉽게 말하면, 하나의 프로세스(프로그램) 안에서 동시에 여러 작업을 수행할 수 있게 해주는 것입니다. 쓰레드는 프로그램의 실행 흐름을 독립적으로 제어하며, 각각의 쓰레드는 별도의 실행 경로를 가지고 작업을 수행합니다.

쓰레드의 기본 개념을 이해하기 위해 다음과 같은 비유를 생각해볼 수 있습니다. 하나의 프로그램은 여러 쓰레드로 이루어진 "일꾼들의 작업공장"이라고 생각할 수 있습니다. 각각의 쓰레드는 자신이 맡은 작업을 동시에 처리하며, 각각 독립적인 실행 흐름을 가지고 작업을 수행합니다. 이렇게 작업공장에 여러 일꾼(쓰레드)이 있다면 작업을 훨씬 효율적으로 처리할 수 있습니다.

쓰레드를 사용하는 이유는 다양합니다. 주요한 이유는 다음과 같습니다:

  1. 동시성(Concurrency): 여러 작업을 동시에 실행하여 처리 속도를 향상시킬 수 있습니다. 예를 들어, 웹 브라우저에서 동시에 여러 웹 페이지를 로드하거나, 게임에서 동시에 여러 플레이어가 동작하는 등의 상황에서 쓰레드를 사용하여 동시성을 구현할 수 있습니다.

  2. 응답성(Responsiveness): 쓰레드를 사용하면 프로그램이 여러 작업을 동시에 처리할 수 있으므로, 일부 작업이 블록되거나 시간이 오래 걸리는 작업이 있더라도 다른 작업을 수행할 수 있습니다. 이를 통해 사용자 인터페이스의 응답성을 유지하고, 장기 실행 작업이 프로그램의 전반적인 동작을 방해하지 않도록 할 수 있습니다.
  3. 병렬성(Parallelism): 멀티코어 프로세서에서 쓰레드를 사용하여 여러 작업을 병렬로 실행할 수 있습니다. 이를 통해 작업을 효율적으로 분산하고, 작업의 처리 속도를 향상시킬 수 있습니다. / 각각의 코어가 각각의 작업을 진행하기 때문에 동시 수행이며, 처리 속도가 빨라집니다.

쓰레드를 사용하여 프로그램을 개발할 때는 쓰레드 간의 동기화와 상호작용, 공유 자원에 대한 접근 등 다양한 쓰레드 관련 이슈를 고려해야 합니다. 쓰레드를 잘 이해하고 적절하게 활용하면 다양한 유형의 작업을 효율적으로 처리할 수 있습니다.

💡
Q1. 작업이 3개, 코어가 4개인 경우 (동시성 / 병렬성)
Q2. 작업이 4개, 코어가 1개인 경우 (동시성 / 병렬성)
Q3. 작업이 6개, 코어가 2개인 경우 (동시성 / 병렬성)

Q1의 경우 작업에 비해 코어의 수가 많아 작업의 수량에 맞게 CPU코어를 분배해줄 수 있기 때문에 병렬성이 적합합니다.
Q2의 경우 작업에 비해 코어의 수가 적기 때문에 하나의 코어에서 여러 작업을 처리할 수 있는 동시성이 적합합니다.
Q3의 경우 각각의 작업이 동일하다면 작업에 비해 코어의 수가 적지만 1개 이상의 코어를 가지고 있기 때문에 작업을 3개씩 2개의 코어로 나누는 병렬성이 일어나고, 해당 코어 내에서 여러 작업을 처리할 수 있게 동시성이 수행하도록 합니다.

💡 Java Program 상의 Thread에 대해서 알아보자

java에서 main 메서드의 작업을 수행하는 것도 쓰레드 입니다. 이를 main쓰레드라고 하고, JVM이 main method를 실행하는데 JVM은 main method를 찾아서 프로그램을 실행해줍니다.
main method는 제일 먼저 main Thread를 생성(=최초의)합니다. 시작 시점에는 단일 Thread (main Thread) 1개만 존재합니다. 이 후 main Thread에서 Thread를 생성 / 실행하게 되면 Multi-Thread가 됩니다.

❓ Multi-Thread란 ?

Multi-thread(다중 스레드)는 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 프로그래밍 모델을 의미합니다. 다중 스레드를 사용하면 여러 작업을 동시에 처리하고 병렬로 실행할 수 있어 성능과 응답성을 향상시킬 수 있습니다.

모든 프로세스에는 반드시 하나 이상의 thread가 존재하며 이를 단일 쓰레드라고 합니다. 단일 스레드에서는 하나의 작업을 순차적으로 실행하며, 다른 작업을 처리하기 위해서는 현재 작업이 완료될 때까지 기다려야 합니다.

728x90
반응형

+ Recent posts