logo

프로세스 대. 스레드 | 프로세스와 스레드의 차이점

'프로세스와 스레드의 차이'는 기술 면접에서 가장 많이 묻는 질문 중 하나입니다. 프로세스와 스레드는 모두 서로 관련되어 있고 매우 유사하므로 둘 사이의 차이점을 이해하는 데 혼란을 야기합니다. 프로세스와 스레드는 독립적인 실행 순서이지만 프로세스가 서로 다른 메모리 공간에서 실행되는 반면 동일한 프로세스의 스레드는 공유 메모리 공간에서 실행된다는 점에서 둘 다 구별됩니다.

이 주제에서는 프로세스와 스레드에 대한 간략한 소개와 둘 사이의 다른 차이점을 이해합니다.

프로세스 대. 실

프로세스란 무엇입니까?

프로세스는 실행 중인 프로그램의 인스턴스입니다. 프로그램을 실행할 때 프로그램이 직접 실행되지는 않습니다. 프로그램을 실행하는 데 필요한 모든 단계를 수행하는 데는 시간이 걸리며 이러한 실행 단계를 따르는 것을 프로세스라고 합니다.

프로세스는 한 번에 여러 작업을 수행하기 위해 다른 프로세스를 만들 수 있습니다. 생성된 프로세스는 다음과 같이 알려져 있습니다. 클론 또는 하위 프로세스 , 주요 프로세스는 상위 프로세스 . 각 프로세스에는 자체 메모리 공간이 있으며 이를 다른 프로세스와 공유하지 않습니다. 이는 활성 엔터티로 알려져 있습니다. 일반적인 프로세스는 메모리에 아래와 같은 형태로 남아있습니다.

자바에서 업데이트하는 방법
프로세스 대. 실

OS의 프로세스는 다음 상태 중 하나로 유지될 수 있습니다.

    새로운: 새로운 프로세스가 생성되고 있습니다.준비가 된: 프로세스가 준비되어 프로세서에 할당되기를 기다리고 있습니다.달리기: 프로그램이 실행되고 있습니다.대기 중: 어떤 이벤트가 발생하거나 발생하기를 기다리고 있습니다.종료됨: 실행이 완료되었습니다.

프로세스는 어떻게 작동하나요?

프로그램 실행을 시작하면 프로세서가 이를 처리하기 시작합니다. 다음 단계가 필요합니다.

세상 최고의 미소
  • 첫째, 프로그램은 번역 후 바이너리 코드로 컴퓨터 메모리에 로드됩니다.
  • 프로그램을 실행하려면 메모리와 기타 OS 리소스가 필요합니다. 레지스터, 프로그램 카운터, 스택 등의 리소스와 이러한 리소스는 OS에서 제공됩니다.
  • 레지스터에는 명령어, 저장 주소 또는 프로세스에 필요한 기타 데이터가 포함될 수 있습니다.
  • 프로그램 카운터는 프로그램 순서의 트랙을 유지합니다.
  • 스택에는 컴퓨터 프로그램의 활성 서브루틴에 대한 정보가 있습니다.
  • 프로그램에는 다양한 인스턴스가 있을 수 있으며 실행 중인 프로그램의 각 인스턴스를 개별 프로세스라고 합니다.

공정의 특징

  • 프로세스를 생성할 때마다 각 프로세스에 대해 OS에 대한 별도의 시스템 호출을 수행해야 합니다. 그만큼 포크 () 함수는 프로세스를 생성합니다.
  • 각 프로세스는 자신의 주소나 메모리 공간 내에 존재합니다.
  • 각 프로세스는 독립적이며 OS에 의해 격리된 프로세스로 처리됩니다.
  • 프로세스가 서로 통신하려면 IPC(프로세스 간 통신)가 필요합니다.
  • 프로세스 간의 적절한 동기화는 필요하지 않습니다.

스레드란 무엇입니까?

스레드는 프로세스의 하위 집합이며 경량 프로세스라고도 합니다. 프로세스에는 둘 이상의 스레드가 있을 수 있으며 이러한 스레드는 스케줄러에 의해 독립적으로 관리됩니다. 하나의 프로세스 내의 모든 스레드는 서로 상호 연관되어 있습니다. 스레드에는 다음과 같은 몇 가지 공통 정보가 있습니다. 데이터 세그먼트, 코드 세그먼트, 파일 등 이는 피어 스레드와 공유됩니다. 그러나 자체 레지스터, 스택 및 카운터를 포함합니다.

프로세스 대. 실

스레드는 어떻게 작동하나요?

앞서 설명한 것처럼 스레드는 하위 프로세스 또는 프로세스 내의 실행 단위입니다. 프로세스에는 단일 스레드부터 여러 스레드까지 포함될 수 있습니다. 스레드는 다음과 같이 작동합니다.

  • 프로세스가 시작되면 OS는 프로세스에 메모리와 리소스를 할당합니다. 프로세스 내의 각 스레드는 해당 프로세스의 메모리와 리소스만 공유합니다.
  • 스레드는 주로 애플리케이션 처리를 개선하는 데 사용됩니다. 실제로는 한 번에 하나의 스레드만 실행되지만 스레드 간의 빠른 컨텍스트 전환으로 인해 스레드가 병렬로 실행되는 것처럼 보입니다.
  • 단일 스레드가 프로세스에서 실행되는 경우 이를 다음과 같이 알려져 있습니다. 단일 스레드 그리고 여러 스레드가 동시에 실행되면 다음과 같이 알려져 있습니다. 멀티스레딩.

스레드 유형

스레드에는 다음과 같은 두 가지 유형이 있습니다.

1. 사용자 레벨 스레드

기술의 장점과 단점

이름에서 알 수 있듯이 사용자 수준 스레드는 사용자만 관리하며 커널에는 해당 정보가 없습니다.

이는 더 빠르고 쉽게 생성하고 관리할 수 있습니다.

커널은 이러한 모든 스레드를 단일 프로세스로 간주하고 이를 하나의 프로세스로만 처리합니다.

사용자 수준 스레드는 시스템 호출이 아닌 사용자 수준 라이브러리에 의해 구현됩니다.

2. 커널 수준 스레드

커널 수준 스레드는 운영 체제에 의해 처리되고 해당 커널에 의해 관리됩니다. 이러한 스레드는 컨텍스트 정보가 커널에 의해 관리되기 때문에 사용자 수준 스레드보다 느립니다. 커널 수준 스레드를 생성하고 구현하려면 시스템 호출을 수행해야 합니다.

문자열을 정수로 변환하는 방법

스레드의 특징

  • 스레드는 프로세스 내의 피어 스레드와 데이터, 메모리, 리소스, 파일 등을 공유합니다.
  • 하나의 시스템 호출은 둘 이상의 스레드를 생성할 수 있습니다.
  • 각 스레드에는 자체 스택과 레지스터가 있습니다.
  • 스레드는 동일한 주소 공간을 공유하므로 서로 직접 통신할 수 있습니다.
  • 예상치 못한 상황을 방지하려면 스레드를 동기화해야 합니다.

프로세스와 스레드의 주요 차이점

  • 프로세스는 독립적이며 다른 프로세스 내에 포함되지 않는 반면, 모든 스레드는 논리적으로 프로세스 내에 포함됩니다.
  • 프로세스의 가중치는 높은 반면 스레드의 가중치는 가볍습니다.
  • 프로세스는 자체 메모리와 기타 리소스를 포함하므로 개별적으로 존재할 수 있지만 스레드는 개별적으로 존재할 수 없습니다.
  • 프로세스 간의 적절한 동기화는 필요하지 않습니다. 반면에 예상치 못한 시나리오를 방지하려면 스레드를 동기화해야 합니다.
  • 프로세스는 프로세스 간 통신만을 사용하여 서로 통신할 수 있습니다. 반면에 스레드는 동일한 주소 공간을 공유하므로 서로 직접 통신할 수 있습니다.

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

프로세스
프로세스는 실행되거나 처리되는 프로그램의 인스턴스입니다. 스레드는 스케줄러가 독립적으로 관리하는 프로세스의 세그먼트 또는 경량 프로세스입니다.
프로세스는 서로 독립적이므로 메모리나 기타 리소스를 공유하지 않습니다. 스레드는 상호 의존적이며 메모리를 공유합니다.
각 프로세스는 운영 체제에서 새로운 프로세스로 처리됩니다. 운영 체제는 모든 사용자 수준 스레드를 단일 프로세스로 간주합니다.
한 프로세스가 운영 체제에 의해 차단되면 다른 프로세스가 실행을 계속할 수 있습니다. 사용자 수준 스레드가 차단되면 OS가 모든 스레드를 단일 프로세스로 간주하므로 모든 피어 스레드도 차단됩니다.
두 프로세스 간 컨텍스트 전환은 스레드에 비해 무겁기 때문에 시간이 많이 걸립니다. 스레드 간 컨텍스트 전환은 매우 가볍기 때문에 빠릅니다.
각 프로세스의 데이터 세그먼트와 코드 세그먼트는 서로 독립적입니다. 스레드는 피어 스레드와 데이터 세그먼트 및 코드 세그먼트를 공유합니다. 따라서 다른 스레드에서도 동일합니다.
운영 체제는 프로세스를 종료하는 데 더 많은 시간이 걸립니다. 스레드는 매우 짧은 시간 내에 종료될 수 있습니다.
새로운 프로세스를 생성하는 데는 각각의 새로운 프로세스가 모든 리소스를 사용하므로 더 많은 시간이 소요됩니다. 스레드를 생성하는 데 더 적은 시간이 필요합니다.