스레드가 스택을 가지며 프로세스에 스택 정책이 있습니다.스레드와 프로세스 스택에 대한 간단한 질문입니다.
10 개의 프로세스가 있다면 스택 수는 10입니까?
하나의 프로세스에서 10 개의 스레드가 있다면 스택 수는 1입니까? 모든 스레드가 동일한 스택을 공유 했습니까?
감사합니다.
스레드가 스택을 가지며 프로세스에 스택 정책이 있습니다.스레드와 프로세스 스택에 대한 간단한 질문입니다.
10 개의 프로세스가 있다면 스택 수는 10입니까?
하나의 프로세스에서 10 개의 스레드가 있다면 스택 수는 1입니까? 모든 스레드가 동일한 스택을 공유 했습니까?
감사합니다.
스택이 무엇인지 생각하면 스택을 공유하는 것이 바람직하지 않습니다.
데이터 구조가 아닌 호출 스택임을 기억하십시오. 명령 포인터 (명령 실행을 지시 함)가 프로그램을 통해 이동할 때 호출 된 함수로 점프하기 전에 스택에 현재 컨텍스트 (로컬 변수, 호출 전 IP)를 푸시하는 함수 호출이 발생합니다. 이 함수는 로컬 변수 등에 대해 스택의 맨 위를 사용하고, 스택이 끝나면 스택은 원래 함수의 로컬 변수를 맨 위에두고 PHP를 함수 호출 직후에 복원합니다.
두 스레드가 동일한 스택을 갖고 있다면 컨텍스트를 공유하지만 서로 다른 IP를 가질 수 있습니다. 스레드 중 하나가 함수를 호출하면 스택은 더 이상 다른 스레드 (원래 함수에있는 스레드)에 대해 더 이상 적합하지 않습니다. IP가 동기화되면 두 개의 뚜렷한 스레드가 없습니다. 모든 것을 두 번 수행하고있는 것입니다.
다른 사람들은 다음과 같이 말했습니다. 스레드 당 하나의 스택, 프로세스 당 하나의 스택.
각 프로세스에는 자체 스택이 있습니다. 따라서 N (단일 스레드) 프로세스에는 N 개의 스택이 있습니다.
각 스레드마다 자체 스택이 있습니다. 따라서 N 개의 쓰레드를 가진 프로세스는 N 개의 스택을 가진다.
스레드 당 하나의 스택. 2 개의 스레드가있는 5 개의 프로세스는 각각 10 개의 스택과 같습니다.
@nobugz, 이는 불필요한 -1입니다. 그는 구체적으로 대답에서 * 단일 스레드 * 프로세스는 각각 하나의 스택을 가지고 있다고 말합니다. –