2010-02-17 6 views

답변

4

스택이 무엇인지 생각하면 스택을 공유하는 것이 바람직하지 않습니다.

데이터 구조가 아닌 호출 스택임을 기억하십시오. 명령 포인터 (명령 실행을 지시 함)가 프로그램을 통해 이동할 때 호출 된 함수로 점프하기 전에 스택에 현재 컨텍스트 (로컬 변수, 호출 전 IP)를 푸시하는 함수 호출이 발생합니다. 이 함수는 로컬 변수 등에 대해 스택의 맨 위를 사용하고, 스택이 끝나면 스택은 원래 함수의 로컬 변수를 맨 위에두고 PHP를 함수 호출 직후에 복원합니다.

두 스레드가 동일한 스택을 갖고 있다면 컨텍스트를 공유하지만 서로 다른 IP를 가질 수 있습니다. 스레드 중 하나가 함수를 호출하면 스택은 더 이상 다른 스레드 (원래 함수에있는 스레드)에 대해 더 이상 적합하지 않습니다. IP가 동기화되면 두 개의 뚜렷한 스레드가 없습니다. 모든 것을 두 번 수행하고있는 것입니다.

다른 사람들은 다음과 같이 말했습니다. 스레드 당 하나의 스택, 프로세스 당 하나의 스택.

0

각 프로세스에는 자체 스택이 있습니다. 따라서 N (단일 스레드) 프로세스에는 N 개의 스택이 있습니다.

각 스레드마다 자체 스택이 있습니다. 따라서 N 개의 쓰레드를 가진 프로세스는 N 개의 스택을 가진다.

+1

@nobugz, 이는 불필요한 -1입니다. 그는 구체적으로 대답에서 * 단일 스레드 * 프로세스는 각각 하나의 스택을 가지고 있다고 말합니다. –

2

스레드 당 하나의 스택. 2 개의 스레드가있는 5 개의 프로세스는 각각 10 개의 스택과 같습니다.

2

스레드 -> 실행 컨텍스트 -> 자체 리소스 -> 자체 스택이 필요합니다.

+0

그래서 스택을 공유하는 상황이 없습니까? – skydoor

+0

내가 알게 된 시스템에 없거나 스레드간에 호출 스택을 서술하려는 추가 오버 헤드가 발생하는 이유는 무엇입니까? 나에게 불필요한 오버 헤드처럼 보입니다. – jldupont

관련 문제