2012-04-16 3 views
0

두 코어를 모두 사용할 수있는 주류 최신 OS가있는 듀얼 코어 시스템이 있다고 가정 해 보겠습니다. 나는 같은 프로세스 내에서 두 개의 스레드, P1Q1을 가지고, 그들은 대략 동일한 시스템주기 P2Q2, OS는 스레드를 수행, 말, 자식 스레드를 생성하는 시작하는 일이 있다면 동시에 창조? OS 내부에서 스레드 생성을 동시에 실행할 수 있습니까?

나는 쓰레드 생성은 비용이 들어, 그래서 질문은 사전에 ... 등

감사했다.

+3

어떤 OS 에서요? – SLaks

+0

두 스레드가 동일한 프로세스 내에서 생성되었거나 별도의 프로세스에서 생성됩니까? 그것은 중요. 스레드는 시작해야하는 상위 프로세스가 있습니다. 이를 염두에두고 부모 프로세스를 첫 번째 스레드로 생각하고 있습니까? 프로세스와 스레드는 동일하지 않습니다. –

답변

2

잘 정립 된 OS는 커널 코드를 동시에 실행하는 여러 프로세서를 가질 수 있습니다. 따라서 스레드 생성과 관련된 일부 작업이 동시에 발생할 수 있습니다. 그러나 일부 공유 데이터 구조 (예 : 메모리 할당, 새로 생성 된 위협 구조를 전역 목록에 삽입)를 조작하기 위해 필요한 직렬화가있을 것입니다. 프로세서는 동일한 잠금 장치로 인해 동시성을 줄일 수 있습니다.

새 스레드를 너무 자주 만들어 스레드 생성의 오버 헤드가 실제로 문제가되는 시스템/응용 프로그램은 틀리게 설계되었습니다 (시작 시간과 관련하여 스레드에서 유용한 작업을 거의하지 않고 재사용의 명백한 최적화를 활용하지 않음). 풀에서 단편화 된 스레드).

+0

+1 - Start(), Join()을 몇 번이나 보았습니까? –

0

동시에 나타납니다. 병렬로 진행할 수없는 스레드 생성의 측면이 있습니다. 커널 메모리 관리자가 두 스레드에 동일한 스택을 할당하면 불행합니다!

스레드 만들기는 앱을 실행하는 동안 전혀 수행하지 않는 것이 좋습니다. 따라서 스레드 풀의 인기가 높습니다. 블록 실행 시간이 오래 걸리면 응용 프로그램이 종료 될 때까지 스레드가 중단 될 수 있습니다. 이는 흔히 명시 적 스레드 종료 (사용자 코드에서 최악의 경우 거의 불가능 함)를 필요로하지 않음을 의미합니다.

개발자들은 스레드가 시작될 때 '반환'결과와 '시작'에 매개 변수를 전달하는 '함수'로 생각하기 때문에 개발자가 지속적으로 스레드를 시작하고 중지한다고 생각합니다. Ths는 스레드를 개념화하는 최선의 방법이 아닙니다.

관련 문제