[multithreading] 프로세스와 스레드의 차이점은 무엇입니까?

프로세스와 스레드의 기술적 차이점은 무엇입니까?

‘프로세스’와 같은 단어가 과도하게 사용되었다는 느낌이 들며 하드웨어 및 소프트웨어 스레드도 있습니다. Erlang 과 같은 언어의 경량 프로세스는 어떻습니까? 한 용어를 다른 용어보다 사용해야하는 확실한 이유가 있습니까?



답변

프로세스와 스레드는 모두 독립적 인 실행 순서입니다. 일반적인 차이점은 동일한 프로세스의 스레드가 공유 메모리 공간에서 실행되고 프로세스는 별도의 메모리 공간에서 실행된다는 것입니다.

“하드웨어”와 “소프트웨어”스레드 중 무엇을 참조하는지 잘 모르겠습니다. 스레드는 CPU 기능이 아닌 운영 환경 기능입니다 (CPU에는 일반적으로 스레드를 효율적으로 만드는 작업이 있지만).

Erlang은 공유 메모리 멀티 프로그래밍 모델을 노출하지 않기 때문에 “프로세스”라는 용어를 사용합니다. “스레드”라고 부르면 메모리를 공유 한 것입니다.


답변

프로세스
각 프로세스는 프로그램을 실행하는 데 필요한 리소스를 제공합니다. 프로세스에는 가상 주소 공간, 실행 코드, 시스템 개체에 대한 열린 핸들, 보안 컨텍스트, 고유 한 프로세스 식별자, 환경 변수, 우선 순위 클래스, 최소 및 최대 작업 세트 크기 및 하나 이상의 실행 스레드가 있습니다. 각 프로세스는 기본 스레드라고도하는 단일 스레드로 시작되지만 모든 스레드에서 추가 스레드를 작성할 수 있습니다.

스레드
스레드는 프로세스 내에서 실행 예약 될 수있는 엔티티입니다. 프로세스의 모든 스레드는 가상 주소 공간과 시스템 리소스를 공유합니다. 또한 각 스레드는 예외 처리기, 예약 우선 순위, 스레드 로컬 저장소, 고유 한 스레드 식별자 및 시스템이 예약 될 때까지 스레드 컨텍스트를 저장하는 데 사용할 구조 집합을 유지 관리합니다. 스레드 컨텍스트에는 스레드의 시스템 레지스터 세트, 커널 스택, 스레드 환경 블록 및 스레드 프로세스의 주소 공간에있는 사용자 스택이 포함됩니다. 스레드는 또한 클라이언트를 가장하는 데 사용할 수있는 자체 보안 컨텍스트를 가질 수 있습니다.


이 정보는 Microsoft 문서에서 찾을 수 있습니다. 프로세스 및 스레드 정보

Microsoft Windows는 선점 형 멀티 태스킹을 지원하므로 여러 프로세스에서 여러 스레드를 동시에 실행할 수 있습니다. 다중 프로세서 컴퓨터에서 시스템은 컴퓨터에 프로세서가있는 수만큼 스레드를 동시에 실행할 수 있습니다.


답변

방법:

  • 프로그램의 실행 인스턴스를 프로세스라고합니다.
  • 일부 운영 체제는 ‘작업’이라는 용어를 사용하여 실행중인 프로그램을 나타냅니다.
  • 프로세스는 항상 주 메모리 또는 기본 액세스 메모리라고도하는 주 메모리에 저장됩니다.
  • 따라서 프로세스를 활성 엔티티라고합니다. 컴퓨터가 재부팅되면 사라집니다.
  • 여러 프로세스가 동일한 프로그램과 연관 될 수 있습니다.
  • 다중 프로세서 시스템에서 여러 프로세스를 병렬로 실행할 수 있습니다.
  • 단일 프로세서 시스템에서는 진정한 병렬 처리가 이루어지지는 않지만 프로세스 스케줄링 알고리즘이 적용되고 프로세서는 동시 처리의 착오를 일으키는 각 프로세스를 한 번에 하나씩 실행하도록 예약됩니다.
  • 예 : ‘계산기’프로그램의 여러 인스턴스를 실행합니다. 각 인스턴스를 프로세스라고합니다.

실:

  • 스레드는 프로세스의 하위 집합입니다.
  • 실제 프로세스와 비슷하지만 프로세스 컨텍스트 내에서 실행되고 커널이 프로세스에 할당 한 동일한 리소스를 공유하므로 ‘경량 프로세스’라고합니다.
  • 일반적으로 프로세스에는 한 번에 하나의 시스템 명령어 세트 만 실행되는 제어 스레드가 하나만 있습니다.
  • 프로세스는 명령을 동시에 실행하는 여러 실행 스레드로 구성 될 수도 있습니다.
  • 다중 제어 스레드는 다중 프로세서 시스템에서 가능한 진정한 병렬 처리를 이용할 수 있습니다.
  • 단일 프로세서 시스템에서는 스레드 예약 알고리즘이 적용되고 프로세서는 각 스레드를 한 번에 하나씩 실행하도록 예약됩니다.
  • 프로세스 내에서 실행되는 모든 스레드는 동일한 주소 공간, 파일 설명자, 스택 및 기타 프로세스 관련 속성을 공유합니다.
  • 프로세스의 스레드는 동일한 메모리를 공유하므로 프로세스 내에서 공유 데이터에 대한 액세스를 동기화하면 전례없는 중요성을 얻게됩니다.

지식 퀘스트 에서 위의 정보를 빌 렸습니다 ! 블로그 .


답변

먼저 이론적 인 측면을 살펴 보자. 프로세스와 스레드 간의 차이점과 프로세스간에 공유되는 것을 이해하려면 프로세스가 개념적으로 무엇인지 이해해야합니다.

Tanenbaum의 2.2.2 절 에서 최신 운영 체제 의 클래식 스레드 모델 을 살펴 보았습니다.

프로세스 모델은 리소스 그룹화 및 실행이라는 두 가지 독립적 인 개념을 기반으로합니다. 때때로 그것들을 분리하는 것이 유용합니다; 이곳은 실이 들어오는 곳입니다.

그는 계속한다:

프로세스를 보는 한 가지 방법은 관련 리소스를 그룹화하는 방법입니다. 프로세스에는 프로그램 텍스트와 데이터 및 기타 리소스가 포함 된 주소 공간이 있습니다. 이러한 리소스에는 열린 파일, 하위 프로세스, 보류중인 경보, 신호 처리기, 계정 정보 등이 포함될 수 있습니다. 프로세스 형태로 구성하면보다 쉽게 ​​관리 할 수 ​​있습니다. 프로세스가 갖는 다른 개념은 실행 스레드이며 일반적으로 스레드로 단축됩니다. 스레드에는 다음에 실행할 명령을 추적하는 프로그램 카운터가 있습니다. 현재 작업 변수를 보유하는 레지스터가 있습니다. 스택에는 실행 기록이 포함되어 있으며 각 프로 시저에 대해 하나의 프레임이 호출되었지만 아직 리턴되지 않았습니다. 스레드는 일부 프로세스에서 실행되어야하지만 스레드와 프로세스는 서로 다른 개념이며 별도로 처리 할 수 ​​있습니다. 프로세스는 자원을 함께 그룹화하는 데 사용됩니다. 스레드는 CPU에서 실행되도록 예약 된 엔티티입니다.

아래로 그는 다음 표를 제공합니다.

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

하드웨어 멀티 스레딩 문제를 다루겠습니다 . 일반적으로 CPU는 단일 프로그램 스레드 및 레지스터 세트를 통해 스레드 상태를 유지하면서 단일 실행 스레드를 지원합니다. 그러나 캐시 미스가 발생하면 어떻게됩니까? 메인 메모리에서 데이터를 가져 오는 데 오랜 시간이 걸리며, 그 동안 CPU가 유휴 상태에 있습니다. 따라서 누군가는 기본적으로 두 개의 스레드 상태 세트 (PC + 레지스터)를 가지고있어 다른 스레드 (아마 같은 프로세스에 있거나 다른 프로세스에있을 수 있음)가 다른 스레드가 주 메모리를 기다리는 동안 작업을 수행 할 수 있다고 생각했습니다. 이 개념의 HyperThreading 및 Simultaneous Multithreading (SMT) 과 같은 여러 이름과 구현이 있습니다.

이제 소프트웨어 측면을 보자. 소프트웨어 측에서 스레드를 구현할 수있는 방법은 기본적으로 세 가지가 있습니다.

  1. 사용자 공간 스레드
  2. 커널 스레드
  3. 이 둘의 조합

스레드를 구현하기 위해서는 CPU 상태를 저장하고 여러 스택을 유지 관리하는 기능 만 있으면됩니다. 많은 경우 사용자 공간에서 수행 할 수 있습니다. 사용자 공간 스레드의 장점은 커널에 갇히지 않아도되고 원하는 방식으로 스레드를 예약 할 수 있으므로 초고속 스레드 전환입니다. 가장 큰 단점은 I / O를 차단할 수 없다는 것 (전체 프로세스와 모든 사용자 스레드)을 차단할 수 없다는 것인데, 이는 처음에 스레드를 사용하는 큰 이유 중 하나입니다. 스레드를 사용하여 I / O를 차단하면 많은 경우 프로그램 설계가 크게 간소화됩니다.

커널 스레드는 모든 스케줄링 문제를 OS에 남기는 것 외에도 I / O 차단을 사용할 수 있다는 이점이 있습니다. 그러나 각 스레드 스위치는 잠재적으로 상대적으로 느린 커널에 트래핑해야합니다. 그러나 I / O 차단으로 인해 스레드를 전환하는 경우 I / O 작업이 이미 커널에 이미 갇혀 있기 때문에 실제로 문제가되지 않습니다.

다른 접근 방식은이 둘을 각각 여러 사용자 스레드를 갖는 여러 커널 스레드와 결합하는 것입니다.

따라서 용어에 대한 질문으로 돌아가서, 프로세스와 실행 스레드는 서로 다른 두 가지 개념이며 사용하려는 용어를 선택하는 것은 말하는 내용에 따라 다릅니다. “가벼운 프로세스”라는 용어와 관련하여, 나는 실제로 무슨 일이 일어나고 있는지와 “실행 스레드”라는 용어를 전달하지 않기 때문에 개인적으로 그 요점을 알지 못합니다.


답변

동시 프로그래밍에 대한 자세한 설명

  1. 프로세스에는 자체 포함 된 실행 환경이 있습니다. 프로세스에는 일반적으로 완전한 비공개 기본 런타임 리소스 세트가 있습니다. 특히, 각 프로세스에는 자체 메모리 공간이 있습니다.

  2. 프로세스 내에 스레드가 존재합니다. 모든 프로세스에는 하나 이상의 프로세스가 있습니다. 스레드는 메모리 및 열린 파일을 포함하여 프로세스의 리소스를 공유합니다. 이것은 효율적이지만 문제가되는 의사 소통을 가능하게합니다.

평범한 사람을 염두에두고

컴퓨터에서 Microsoft Word 및 웹 브라우저를 엽니 다. 우리는이 두 프로세스를 호출 합니다 .

Microsoft 단어에서는 무언가를 입력하면 자동으로 저장됩니다. 이제 한 스레드에서 편집하고 다른 스레드에서 저장하는 편집 및 저장이 동시에 수행되는 것을 관찰했습니다.


답변

응용 프로그램은 하나 이상의 프로세스로 구성됩니다. 가장 간단한 용어로 프로세스는 실행 프로그램입니다. 프로세스 컨텍스트에서 하나 이상의 스레드가 실행됩니다. 스레드는 운영 체제가 프로세서 시간을 할당하는 기본 단위입니다. 스레드는 현재 다른 스레드에서 실행중인 부분을 포함하여 프로세스 코드의 모든 부분을 실행할 수 있습니다. 파이버는 응용 프로그램에서 수동으로 예약해야하는 실행 단위입니다. 파이버는 스레드를 예약하는 스레드의 컨텍스트에서 실행됩니다.

여기 에서 도난당했습니다 .


답변

프로세스는 코드, 메모리, 데이터 및 기타 리소스의 모음입니다. 스레드는 프로세스 범위 내에서 실행되는 일련의 코드입니다. 동일한 프로세스 내에서 여러 스레드가 동시에 실행되도록 할 수 있습니다.