개발 언어/기타 웹개발 지식

스레드 01. 프로세스와 스레드의 차이

jjiiiinn 2024. 9. 15. 10:16
728x90

1. 프로세스와 스레드의 차이

1.1 프로세스(Process)란?

  • 프로세스는 컴퓨터에서 실행 중인 프로그램의 한 인스턴스입니다. 운영체제가 할당한 자원(메모리, CPU 시간, 파일 핸들 등)을 사용해 독립적으로 실행됩니다.
  • 각 프로세스는 독립적인 메모리 공간을 가지고 있으며, 다른 프로세스와 메모리를 직접적으로 공유하지 않습니다. 이 때문에, 프로세스 간의 통신은 비교적 복잡한 방법을 사용해야 합니다. 이를 IPC(Inter-Process Communication, 프로세스 간 통신)라고 하며, 대표적인 방법으로는 파이프(pipe), 소켓(socket), 공유 메모리(shared memory) 등이 있습니다.

1.2 스레드(Thread)란?

  • 스레드는 프로세스 내에서 실행되는 작업의 흐름입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 같은 메모리 공간을 공유하면서 실행됩니다.
  • 여러 스레드가 동시에 실행됨으로써 프로그램이 여러 작업을 병렬로 처리할 수 있습니다. 예를 들어, 하나의 스레드가 파일을 읽는 동안, 다른 스레드는 사용자 입력을 처리하거나 화면을 업데이트할 수 있습니다.

1.3 프로세스와 스레드의 차이점

항목 프로세스(Process) 스레드(Thread)
메모리 각 프로세스는 독립적인 메모리 공간을 가지고, 다른 프로세스와 메모리를 공유하지 않음. 같은 프로세스 내의 스레드는 메모리를 공유함. (스택 제외)
자원 할당 프로세스를 생성할 때 운영체제가 자원(CPU, 메모리 등)을 새로 할당함. 스레드는 같은 프로세스의 자원을 공유함.
실행 속도 프로세스 간의 전환은 비교적 무겁고 느림. 스레드 간의 전환은 가볍고 빠름.
통신 방법 프로세스 간 통신은 IPC(파이프, 소켓 등)를 사용하여 복잡함. 스레드 간 통신은 메모리 공유를 통해 간단함.
오버헤드 프로세스를 생성하면 운영체제가 새로운 자원을 할당해야 하므로 오버헤드가 큼. 스레드를 생성하는 것은 프로세스 내에서 메모리를 공유하기 때문에 오버헤드가 적음.
안정성 프로세스가 다른 프로세스에 영향을 주지 않음. 한 스레드의 오류가 같은 프로세스의 다른 스레드에도 영향을 줄 수 있음.

1.4 프로세스와 스레드의 예시

  • 프로세스의 예시: 웹 브라우저, 텍스트 편집기, 파일 탐색기 같은 프로그램을 실행할 때 각각 하나의 프로세스가 생성됩니다. 이때 웹 브라우저는 독립된 메모리 공간에서 실행되며, 다른 프로그램과 메모리를 공유하지 않습니다.
  • 스레드의 예시: 웹 브라우저 안에서는 여러 스레드가 동시에 실행됩니다. 예를 들어, 하나의 스레드는 웹 페이지를 로드하고, 다른 스레드는 사용자의 스크롤을 처리하거나 음악을 재생합니다. 여러 스레드가 같은 프로세스 내에서 동시에 동작하여 응답성을 높입니다.

1.5 멀티프로세스와 멀티스레드

  • 멀티프로세스: 여러 개의 프로세스를 사용하여 병렬로 작업을 처리하는 방법입니다. 각 프로세스는 독립적인 메모리 공간을 가지고 있기 때문에 안정성이 높지만, 프로세스 간의 통신이 복잡하고 비용이 많이 듭니다.
  • 멀티스레드: 하나의 프로세스 내에서 여러 스레드를 사용하여 병렬로 작업을 처리하는 방법입니다. 스레드 간의 통신이 쉽고 빠르지만, 공유 메모리를 사용하므로 동기화 문제가 발생할 수 있습니다.

1.6 언제 프로세스를 사용하고, 언제 스레드를 사용할까?

  • 프로세스는 독립적인 작업을 수행할 때 사용합니다. 예를 들어, 서로 다른 프로그램을 실행할 때는 각각의 프로그램이 독립적으로 실행되어야 하므로 프로세스를 사용합니다.
  • 스레드는 하나의 프로그램 내에서 여러 작업을 동시에 처리할 필요가 있을 때 사용합니다. 예를 들어, 게임이나 웹 브라우저와 같은 프로그램은 여러 작업(그래픽 처리, 사용자 입력 처리, 네트워크 통신 등)을 동시에 수행해야 하므로 스레드를 사용합니다.

1.7 프로세스와 스레드의 장단점 요약

  • 프로세스의 장점:
    • 프로세스 간 메모리 독립성으로 인해 하나의 프로세스가 실패해도 다른 프로세스에는 영향을 미치지 않음.
    • 보안성이 높고 안정적임.
  • 프로세스의 단점:
    • 프로세스 간 통신이 복잡하고 느림.
    • 새로운 프로세스를 생성하는 데 많은 자원이 필요함.
  • 스레드의 장점:
    • 메모리 공유로 인해 스레드 간 통신이 빠르고 효율적임.
    • 스레드를 생성하는 오버헤드가 적고, 프로세스보다 빠르게 실행될 수 있음.
  • 스레드의 단점:
    • 메모리를 공유하기 때문에 동기화 문제가 발생할 수 있음.
    • 한 스레드에서 발생한 문제가 전체 프로세스에 영향을 줄 수 있음.

 

728x90