2010-01-11 5 views
3

단일 프로세스가 Linux (RHEL-5)에서 처리 할 수있는 스레드 수는 얼마입니까? 스레드가 생성되면 각 스레드가 얻을 수있는 스택의 양은 얼마입니까?Linux 스레드 관련

답변

0

스레드 스택 크기는 pthread_attr_setstack 메소드를 사용하여 구성 할 수 있습니다. 쓰레드의 양은 당신이 가지고있는 리소스에 의해서만 제한되며, 2K 개 이상의 쓰레드는 알고있는 애플리케이션에서 작동합니다.

스레드
3

최대 수 : Maximum number of threads per process in Linux?

스택의 크기 :

은 pthread_attr_setstacksize()와 pthread_attr_setstackaddr()가 현재 제공하는 경우에도, 우리는 여전히 당신이 정말 강한이 없으면 당신이 그들을 사용하지 않는 것이 좋습니다 그렇게하는 이유. LinuxThreads의 기본 스택 할당 전략은 거의 최적입니다. 스택은 작아지며 (2k) 상당히 큰 한계 (2M)로 자동 증가합니다. 또한 스레드의 스택 요구 사항을 예측할 수있는 이식성있는 방법이 없기 때문에 스택 크기를 직접 설정하면 프로그램 안정성과 호환성이 떨어집니다.

+1

LinuxThreads는 거의 7 년 동안 어떤 Linux 배포판에도 포함되어 있지 않습니다. 특히, RHEL은 LinuxThreads를 RHEL3 이후에 출시하지 않았습니다. –

+0

@ Jörg. 동의했다. 나는 더 좋은 문서를 찾을 수 없었다. 링크가 있습니까? –

1

(http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html에서) 프로세스에 의해 스레드의 최대 수 없습니다.

그러나 활성 스레드의 총 한도가 있습니다. 이 값을 입력하여 검색 할 수 있습니다 : 당신은 또한이 값을 변경할 수 있습니다

cat /proc/sys/kernel/threads-max 

:

echo 99999 > /proc/sys/kernel/threads-max 

희망이 도움이됩니다.

1

32 비트 컴퓨터를 사용중인 경우 스레드 스택은 결국 크기에 따라 주소 공간을 소모합니다 (< 10,000 스레드).

10k 스레드는 분명히 실현 가능하며 일부 사람들은 많은 프로덕션 서버를 실행하지만 실제로 수행중인 작업을 수행하는 최선의 방법이라고 확신하고 싶습니다.

10k 스레드가 있다고 생각한다면 어쨌든 64 비트 머신이 있고 많은 램이있을 것입니다.

+0

x86의 기본 스레드 스택 크기는 4KB입니다. 4G/4G 분할 커널 구성을 사용하면 이론적으로 2 ** 20 스레드 (1 백만 개 이상)를 시작할 수 있습니다. NPTL이 처음 발표되었을 때, 저자는 실제로이 테스트를 실행했고, 900000보다 약간 벗어났습니다. 약 100,000 스레드 (약 2 초 걸림)를 쉽게 시작할 수 있으며 시스템은 여전히 ​​사용할 수 있습니다 (LinuxThreads와는 달리 100000 스레드가 시작됩니다). 15 분 이상이 걸리며 시스템이 정지합니다. –

+0

저는 대부분의 어플리케이션이 4k 스택 이상을 필요로한다는 가정하에 작업하고있었습니다. – MarkR

+0

그게 잘못되었습니다, Jörg. i686에서 glibc는 모든 스레드에 대해 주소 공간 스택 당 10M을 예약합니다. 당연히 그 메모리는 할당되지 않지만 사용 가능한 매핑 공간의 큰 덩어리를 소비하므로 몇백 개의 스레드 후에는이를 소모하게됩니다. 100k 스레드를 시작하려면 스택 크기 매개 변수를 조정해야합니다. 나는 커널에 대해서만 생각하고 있었고 glibc는 pthread를 구현하지 않았다고 생각합니다. –

관련 문제