2010-02-12 2 views
3

중요한 섹션이나 유사한 동기화 대안을 포함하지 않는 솔루션을 원합니다. Windows에서 Fiber (사용자 수준 스레드)와 비슷한 것을 찾고 있습니다.동일한 프로세서/코어에서 두 개의 Java 스레드를 강제 실행하는 방법은 무엇입니까?

+2

왜이 작업을 수행 하시겠습니까? 동시에 실행해서는 안되는 이유는 두 개의 스레드가있는 이유는 무엇입니까? –

+0

mmyers, 같은 코어에서 실행되도록하는 것은 소프트웨어의 동시성과 아무 관련이 없습니다.프로그램은 그 차이를 알지 못할 것입니다. 프로세서를 공유해야하기 때문에 두 스레드에서 작업을 완료하는 데 "오래 걸립니다". – joejoeson

+0

OS가 무엇입니까? 모든 스레드 또는 일부 스레드에 대한 솔루션을 원하십니까? 나는 당신의 응용 프로그램의 하위 집합에 대한 그것의 가능한 것이라고 생각하지 않습니다. – Eric

답변

14

OS는 어떤 스레드가 어떤 코어에서 처리되는지를 관리합니다. OS의 단일 코어에 스레드를 할당해야합니다.

예를 들어. Windows에서 작업 관리자를 열고 프로세스 탭으로 이동하여 Java 프로세스를 마우스 오른쪽 단추로 누른 다음 특정 코어에 할당하십시오.

그게 당신이 얻는 최고입니다.

+0

Windows를 사용하지 않고 클러스터에서 응용 프로그램을 테스트하고 있습니다. 나는 런타임에 뭔가를 찾고있다. – Alexandru

+0

그런 다음 클러스터에서 실행하십시오. – joejoeson

3

내 지식으로는이를 달성 할 수있는 방법이 없습니다.
OS가 실행중인 스레드를 관리하고 스케줄러에 따라 리소스를 배포하기 만하면되기 때문입니다.

편집 : 당신의 목표는 당신이 스레드 관리자를 사용하는 것이 좋습니다 시스템에 코어 수를 얻을 것 다른 프로세스를 실행하는 "여분의"핵심을 가지고 있기 때문에
(x)는 다음 산란 특정 시스템의 최대 x-1 스레드. 그렇게하면 예비 코어가 생깁니다.

이전의 문이 계속 적용되므로 OS에서 지정하지 않으면 스레드를 실행할 코어를 지정할 수 없습니다. 하지만 자바로부터.

0

Java 응용 프로그램이 스레드 선호도 자체를 제어 할 수 있는지 묻는 것으로이 내용을 읽었습니다. Java는 이것을 제어 할 수있는 방법을 제공하지 않습니다. 그것은 호스트 운영 체제의 비즈니스로 취급됩니다.

무엇이든 할 수 있으면 운영체제가 될 수 있으며 일반적으로 스레드 고정에 사용하는 도구가 OS 고유 일지라도 수행 할 수 있습니다. (OS가 자체가 가상화입니다하지만. 나는 그 일을하려고하면 모르는 고정의 두 가지 수준이있다/실용적.)


모든 관련 핫스팟이있을 나타나지 않습니다 현대 JVM에서의 JVM 스레드 튜닝 옵션.

Rockit JVM을 사용하는 경우 "기본 스레드"(Java 및 OS 스레드간에 1-1 매핑이 있음)와 여러 Java 스레드가 작은 수로 다중화 된 "가는 스레드"중에서 선택할 수 있습니다 OS 스레드. 그러나 AFAIK, JRocket "thin threads"는 32 비트 모드에서만 지원되며 사용되는 OS 스레드 수를 조정할 수 없습니다.

이것은 실제로 Sun 지원 계약 하에서 질문해야하는 질문입니다. 그들은 몇 년 동안 큰 자바 애플리케이션에서 최상의 성능을 얻는 방법을 찾은 사람들이 있습니다.

2

전체 JVM을 단일 코어에 할당하는 것보다는이 작업을 수행하는 방법이 확실하지 않습니다. 리눅스에서는 taskset 사용할 수 있습니다

http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html

을 나는 당신이 가상화 된 환경 (예를 들어, 버추얼 박스/VM웨어 예) 하나 개의 프로세서에 할당 내에서 JVM을 실행할 수 있습니다 가정,하지만 난 그 가져 모르겠어요 당신이 원하는 걸.

관련 문제