2010-07-29 9 views
-1

자바 1.7에 대한 몇 개의 스레드가 관리 가능합니까? 클라이언트가 서버에 로그인 할 수있는 서버/클라이언트 웹 프로그램에서. 이 로그인은 statefull입니다. 클라이언트 수> 서버 당 3000자바 1.7에서 몇 개의 스레드를 관리 할 수 ​​있습니까?

+4

몇 명이나 되셨습니까? –

+0

좀 더 구체적으로 대답 할 필요가 있습니다. 당신이 성취하려는 것을 요약 해주십시오. – AaronLS

+0

서버/클라이언트 웹 프로그램 클라이언트가 서버에 로그인 할 수있는 프로그램. 이 로그인은 statefull입니다. – DanialAbdi

답변

1

Java에는 스레드 수를 Integer.MAX_VALUE로 제한하는 API가 있습니다. (~ 20 억)

그러나 OS/하드웨어는 실제 제한 사항입니다. 자신이하는 일에 따라 100 ~ 10K가 한계가됩니다.

일반적으로 성능 향상을 위해 스레드가 생성됩니다. 그러나 오버 헤드가 추가되므로 스레드를 추가하면 성능이 저하 될 수 있습니다. 드문 경우이지만 두 개의 스레드가 하나의 스레드만큼 좋지 않습니다. 더 많은 쓰레드가 성능을 해치는 지점은 애플리케이션, 하드웨어 및 사용 방법에 따라 다릅니다.

참고 : 논리 코어가 16 개인 경우 특정 시점에 최대 16 개의 스레드 만 실행됩니다.

-1

상한값은 사용 가능한 힙 공간과 관련이 있다고 생각합니다. 그러나 현실적인 한계는 Java 버전보다 시스템을 실행중인 하드웨어와 관련이 있습니다.

+1

힙 공간이 없습니다. 32 비트 시스템에서 스택을위한 가상 주소 공간. –

1

Java 1.7 (아직 없음)이 없습니다. 64 비트 시스템에서는 수만 가지를 사용할 수 있습니다. 32 비트 시스템에서는 주로 스택의 가상 주소 공간으로 제한됩니다.

+0

링크 해 주셔서 감사합니다. – DanialAbdi

1

이론적으로는? 수천.

실제로는 시스템에 따라 다릅니다. 스레드가 부족해지기 전에 메모리가 부족해질 가능성이 큽니다.

3

"충분" 그렇지 않은 경우 적절한 Executor와 함께 스레드 풀을 사용합니다. 당신이해야 할 일은 무엇입니까?

+0

연결 관리 – DanialAbdi

+0

JBoss Netty를 살펴보십시오. http://jboss.org/netty –

-1

각 스레드에는 자체 스택 공간이 있습니다. 스택은 힙 외부에 있지만 JVM에 할당 된 메모리 내에 저장됩니다. 따라서 최대 스레드는 일반적으로 OS가 JVM에 할당 할 수있는 메모리 양에 의해 제한됩니다. Windows에서는 JVM의 메모리가 부족하기 전에 최대 스레드 수가 약 1000-2000에 해당합니다.

+0

자바 쓰레드는 OS 할당 스택 공간을 사용하는데 이는 __NOT__가 JVM에 할당되어 있습니다. 각 스레드 스택과 관련된 JVM 메모리가 적지 만 실제로 스택은 OS 프로세스 메모리 __external__에서 JVM으로 할당되어 JVM의 메모리 사용량이 적게됩니다. Xmx/Xms는 실제로 사용 가능한 스레드 수를 __increase__ 할 수 있습니다 –

관련 문제