[multithreading] “실”이란 무엇입니까?

스레드가 실제로 무엇인지에 대한 좋은 정의를 찾고 이해하려고 노력했습니다 .

나는 분명한 것을 놓칠 것 같지만 스레드가 무엇인지에 대해 읽을 때마다 거의 원형 정의, “스레드는 실행 스레드”또는 “실행중인 작업으로 나누는 방법”입니다. 어 응?

내가 스레드가 정말 아니라고 읽은 내용에서 보이는 뭔가 프로세스처럼, 콘크리트. 실제로는 개념 일뿐입니다. 내가 작동하는 방식을 이해하면 프로세서는 프로그램에 대한 일부 명령 ( 실행 스레드 라고 함 ) 을 실행 한 다음 다른 프로그램의 처리로 전환해야 할 때 상태 를 저장합니다. 현재 어딘가에 실행중인 프로그램 (Thread Local Storage) 그리고 다른 프로그램의 명령을 실행하기 시작합니다. 그리고 앞뒤로. 따라서 스레드는 실제로 현재 실행중인 프로그램의 “실행 경로 중 하나”에 대한 개념 일뿐입니다.

실제로 프로세스 인 프로세스와는 달리 리소스의 재벌 등입니다.

정말 도움이되지 않은 정의의 예로서. . .

에서 위키 백과 :

“컴퓨터 과학의 쓰레드는 실행 쓰레드의 줄임말입니다. 쓰레드는 프로그램이 스스로를 둘 이상의 동시에 (또는 의사와 동시에) 실행되는 작업으로 나누는 방법입니다. 쓰레드와 프로세스는 하나와 다릅니다. 운영 체제를 다른 프로세스에 적용하지만 일반적으로 스레드는 프로세스 내에 포함되며 동일한 프로세스의 다른 스레드는 동일한 리소스를 공유하지만 동일한 멀티 태스킹 운영 체제의 다른 프로세스는 그렇지 않습니다. “

그래서 내가 맞습니까? 잘못된? 실은 무엇입니까?

편집 : 분명히 스레드에는 자체 호출 스택이 주어 지므로 다소 구체적인 입니다.



답변

스레드는 프로세서 레지스터에 대한 독립적 인 값 세트입니다 (단일 코어의 경우). 여기에는 명령어 포인터 (일명 프로그램 카운터)가 포함되므로 실행 순서를 순서대로 제어합니다. 또한 각 스레드의 고유 메모리 영역을 더 잘 가리 키거나 서로 방해하는 스택 포인터가 포함됩니다.

스레드는 명령 흐름에서 명령이 작동하고 특정 스레드에 속하기 때문에 제어 흐름 (함수 호출, 루프, 이동)의 영향을받는 소프트웨어 장치입니다. 스레드는 종종 일부 우선 순위 지정 체계에 따라 예약됩니다 (프로세서 코어 당 하나의 스레드로 시스템을 설계 할 수는 있지만 모든 스레드가 항상 실행되고 예약이 필요하지 않음).

실제로 명령 포인터의 값과 해당 위치에 저장된 명령은 명령 포인터의 새 값을 결정하기에 충분합니다. 대부분의 명령어의 경우 이는 단순히 명령어 크기만큼 IP를 전진 시키지만 제어 흐름 명령어는 예측 가능한 다른 방식으로 IP를 변경합니다. IP가 취하는 일련의 값은 프로그램 코드를 통해 직조하는 실행 경로를 형성하여 “스레드”라는 이름을 갖게됩니다.


답변

스레드는 실행 컨텍스트이며 CPU가 명령 스트림을 실행하는 데 필요한 모든 정보입니다.

책을 읽고 있는데 지금 휴식을 취하고 싶었다가 다시 멈춘 지점에서 다시 읽고 싶을 것입니다. 이를 달성하는 한 가지 방법은 페이지 번호, 줄 번호 및 단어 번호를 적어 두는 것입니다. 책을 읽기위한 당신의 처형 상황은이 3 가지 숫자입니다.

룸메이트가 있고 동일한 기술을 사용하는 경우 사용하지 않는 동안 책을 가져 와서 중지 한 위치부터 다시 읽을 수 있습니다. 그런 다음 다시 가져 와서 원래 있던 곳에서 다시 시작할 수 있습니다.

스레드도 같은 방식으로 작동합니다. CPU는 동시에 여러 계산을하고 있다는 착각을줍니다. 각 계산에 약간의 시간을 소비함으로써 그렇게합니다. 각 계산에 대한 실행 컨텍스트가 있기 때문에 그렇게 할 수 있습니다. 친구와 책을 공유 할 수있는 것처럼 많은 작업이 CPU를 공유 할 수 있습니다.

보다 기술적 인 수준에서 실행 컨텍스트 (따라서 스레드)는 CPU 레지스터 값으로 구성됩니다.

마지막 : 스레드는 프로세스와 다릅니다. 스레드는 실행 컨텍스트이며 프로세스는 계산과 관련된 많은 리소스입니다. 프로세스에는 하나 이상의 스레드가있을 수 있습니다.

설명 : 프로세스와 관련된 리소스에는 메모리 페이지 (프로세스의 모든 스레드가 동일한 메모리보기를 가짐), 파일 설명자 (예 : 열린 소켓) 및 보안 자격 증명 (예 : 방법).


답변

공식적으로 스레드를 정의하려면 먼저 스레드가 작동하는 경계를 이해해야합니다.

컴퓨터 프로그램은 일부 저장소에서 컴퓨터 메모리로로드되어 실행을 시작할 때 프로세스가 됩니다. 프로세스는 프로세서 또는 프로세서 세트에 의해 실행될 수 있습니다. 메모리의 프로세스 설명에는 프로그램의 현재 위치 (즉, 현재 실행중인 명령)를 추적하는 프로그램 카운터, 레지스터, 변수 저장소, 파일 핸들, 신호 등과 같은 중요한 정보가 포함됩니다.

스레드는 독립적으로 다른 코드의 실행 가능한 프로그램 내에서 같은 일련의 명령이다. 그림은 개념을 보여줍니다.
여기에 이미지 설명을 입력하십시오

스레드는 동일한 프로세스 주소 공간 내에 있으므로 프로세스 의 메모리 설명에있는 많은 정보를 스레드간에 공유 할 수 있습니다.

스택 (스레드 당 다른 메모리 영역에 대한 스택 포인터), 레지스터 및 스레드 특정 데이터와 같은 일부 정보는 복제 할 수 없습니다. 이 정보는 스레드가 프로그램의 기본 스레드 및 프로그램 내의 하나 이상의 다른 스레드와 독립적으로 예약 될 수 있도록합니다 .

멀티 스레드 프로그램을 실행하려면 명시적인 운영 체제 지원이 필요합니다. 다행히도 대부분의 최신 운영 체제는 NPTL을 통한 Linux, BSD 변형, Mac OS X, Windows, Solaris, AIX, HP-UX 등과 같은 스레드를 지원합니다. 운영 체제는 다른 메커니즘을 사용하여 멀티 스레딩 지원을 구현할 수 있습니다.

여기서 그래픽으로 개념이 표현됩니다.

여기 에서 주제에 대한 자세한 정보를 찾을 수 있습니다. 그것은 또한 내 정보 출처였습니다.

나를 단지에서 오는 문장을 추가 할 수 있도록 임베디드 시스템 소개 에 의해 에드워드 리Seshia를 :

스레드는 동시에 실행되고 메모리 공간을 공유하는 필수 프로그램입니다. 그들은 서로의 변수에 접근 할 수 있습니다. 이 분야의 많은 실무자들은“스레드”라는 용어를보다 좁게 사용하여 메모리를 공유하는 프로그램을 구성하는 특정 방법을 나타내며, [기타]는 명령형 프로그램이 동시에 실행되고 메모리를 공유하는 모든 메커니즘을 광범위하게 나타냅니다. 이러한 넓은 의미에서 스레드는 운영 체제가 전혀 없어도 거의 모든 마이크로 프로세서에서 인터럽트 형태로 존재합니다 (베어 아이언).


답변

프로세스는 필요한 경우 네트워크를 사용하여 데이터를 공유하는 두 대의 다른 컴퓨터를 사용하는 두 사람과 같습니다. 스레드는 동일한 컴퓨터를 사용하는 두 사람과 같습니다. 데이터를 명시 적으로 공유 할 필요는 없지만 신중하게 전환해야합니다.

개념적으로 스레드는 동일한 주소 공간에서 윙윙 거리는 여러 작업자 꿀벌입니다. 각 스레드에는 자체 스택, 자체 프로그램 카운터 등이 있지만 프로세스의 모든 스레드는 동일한 메모리를 공유합니다. 두 개의 프로그램이 동시에 실행되고 있다고 생각하지만 둘 다 동일한 객체에 액세스 할 수 있습니다.

이것을 프로세스와 대조하십시오. 프로세스마다 고유 한 주소 공간이 있으므로 한 프로세스의 포인터를 사용하여 다른 프로세스의 개체를 참조 할 수 없습니다 (공유 메모리를 사용하지 않는 한).

이해해야 할 핵심 사항은 다음과 같습니다.

  • 프로세스와 스레드 모두 “동시에 실행될 수 있습니다”.
  • 프로세스는 기본적으로 메모리를 공유하지 않지만 스레드는 동일한 프로세스에서 모든 메모리를 다른 스레드와 공유합니다.
  • 프로세스의 각 스레드에는 자체 스택과 자체 명령 포인터가 있습니다.

답변

나는 ABRAHAM SILBERSCHATZ, PETER BAER GALVIN 및 GREG GAGNE의 Operating Systems Concepts 책에서 많은 내용을 사용하고 사물에 대한 내 자신의 이해를 사용할 것입니다.

방법

모든 응용 프로그램은 컴퓨터에 텍스트 (또는 코드) 형식으로 상주합니다.

우리는 프로그램 자체가 과정이 아니라고 강조합니다. 프로그램은 디스크에 저장된 명령 목록이 포함 된 파일 (종종 실행 파일이라고 함)과 같은 수동 엔터티입니다.

애플리케이션을 시작할 때 실행 인스턴스를 만듭니다. 이 실행 인스턴스를 프로세스라고합니다. 편집 : (내 해석에 따르면 클래스 및 클래스의 인스턴스와 유사하며 클래스의 인스턴스는 프로세스입니다.)

프로세스의 예로는 Chrome이 있습니다. Chrome을 시작하면 3 개의 프로세스가 생성됩니다.

브라우저 프로세스는 사용자 인터페이스와 디스크 및 네트워크 I / O를 관리합니다. Chrome이 시작되면 새로운 브라우저 프로세스가 생성됩니다. 하나의 브라우저 프로세스 만 작성됩니다.

렌더러 프로세스에는 웹 페이지를 렌더링하기위한 논리가 포함되어 있습니다. 따라서 HTML, Javascript, 이미지 등을 처리하기위한 논리가 포함되어 있습니다. 일반적으로 새 탭에서 열린 각 웹 사이트에 대해 새 렌더러 프로세스가 작성되므로 여러 렌더러 프로세스가 동시에 활성화 될 수 있습니다.

• 사용 중인 각 유형의 플러그인 (예 : Flash 또는 QuickTime)에 대해 플러그인 프로세스가 작성됩니다. 플러그인 프로세스에는 플러그인 코드와 플러그인이 연관된 렌더러 프로세스 및 브라우저 프로세스와 통신 할 수 있도록하는 추가 코드가 포함되어 있습니다.

이것에 대답하려면 먼저 프로세서가 무엇인지 알아야한다고 생각합니다. 프로세서는 실제로 계산을 수행하는 하드웨어입니다. 편집 : (두 숫자 추가, 배열 정렬, 기본적으로 작성된 코드 실행과 같은 계산)

이제 스레드 정의로 넘어갑니다.

스레드는 CPU 사용기본 단위입니다 . 스레드 ID, 프로그램 카운터, 레지스터 세트 및 스택으로 구성됩니다.

편집 : 인텔 웹 사이트의 스레드 정의 :

스레드 또는 실행 스레드는 단일 CPU 코어를 통해 전달되거나 처리 될 수있는 기본 순서의 명령 시퀀스에 대한 소프트웨어 용어입니다.

따라서 Chrome 애플리케이션의 렌더러 프로세스가 숫자 배열을 정렬하면 정렬은 스레드 / 스레드 스레드에서 수행됩니다. (쓰레드에 관한 문법은 혼란스러워 보입니다)

사물의 나의 해석

프로세스는 실행 인스턴스입니다. 스레드는 CPU 액세스를 통해 계산을 수행하는 실제 작업자입니다. 프로세스에 대해 여러 스레드가 실행중인 경우 프로세스는 공통 메모리를 제공합니다.

편집 :
더 많은 컨텍스트를 제공하는 데 도움이되는 기타 정보

모든 현대 컴퓨터에는 둘 이상의 스레드가 있습니다. 컴퓨터의 스레드 수는 컴퓨터의 코어 수에 따라 다릅니다.

동시 컴퓨팅 :

Wikipedia에서 :

동시 컴퓨팅은 순차적으로 (다음 시작 전에 하나를 완료하는 대신) 겹치는 시간 동안 (동시에) 여러 계산이 실행되는 컴퓨팅 형태입니다. 이것은 시스템의 속성이며 개별 프로그램, 컴퓨터 또는 네트워크 일 수 있으며 각 계산 ( “프로세스”)마다 별도의 실행 지점 또는 “제어 스레드”가 있습니다.

그래서 4 숫자의 합계를 계산하는 프로그램을 작성할 수 있습니다.

(1 + 3) + (4 + 5)

이 스레드 (실행 스레드에서 실행되는 하나의 프로세스)를 계산하는 프로그램에서 다른 스레드에서 실행하여 다른 프로세스를 계산하여 (4 + 5) 계산하고 결과를 원래 프로세스로 반환 할 수 있습니다. 원래 프로세스는 (1 + 3)의 합을 계산합니다.


답변

불행히도 스레드가 존재합니다. 실은 유형의 것입니다. 당신은 하나를 죽일 수 있고 다른 사람들은 여전히 ​​실행 중입니다. 새 스레드를 생성 할 수 있습니다. 각 스레드가 자체 프로세스는 아니지만 프로세스 내부에서 개별적으로 실행됩니다. 멀티 코어 머신에서는 동시에 2 개의 스레드를 실행할 수 있습니다.

http://en.wikipedia.org/wiki/Simultaneous_multithreading

http://www.intel.com/intelpress/samples/mcp_samplech01.pdf


답변

스레드는 실행 규칙이있는 메모리 컨텍스트 (또는 Tanenbaum이 스레드를 더 잘 배치하는 방법, 자원 그룹화)에 지나지 않습니다. 소프트웨어 구조입니다. CPU는 스레드가 무엇인지 알지 못합니다 (일부 예외는 일부 프로세서에는 하드웨어 스레드가 있음). 명령을 실행합니다.

커널은 스레드 및 프로세스 개념을 도입하여 메모리 및 명령어 순서를 의미있는 방식으로 관리합니다.