2012-05-04 2 views
4

가능한 중복 :
Java thread affinityJava에서 각 스레드가 하나의 코어에서 전용으로 실행되도록 스레드를 만들 수 있습니까?

나는 서버를 가지고 있으며 16 개 코어 CPU가 있습니다.

자바에서는 스레드를 몇 개 만들 필요가 있습니다 (스레드 수가 16 개 미만). 각 스레드는 이벤트 큐를 처리하는 등 일부 작업을 실행해야합니다.

어떻게 각 스레드가 하나의 코어에 영원히 할당되도록 이러한 스레드를 만들 수 있습니까? 내가 한 스레드에 대해 OS를 교환하는 코어를 원하지 않는다는 뜻입니다. 난 단지 하나의 스레드가 고정 코어에서 전용으로 실행되기를 바랍니다.

그럴 수 있습니까?


I이 원하는 그 이유는

내가 몇 가지 배경 작업 (연산 집약적)와 같은 서버에있는 일부 사용자에 직면 작업을 처리합니다. 사용자 측에 부정적인 영향을 미치기를 원하지 않습니다. 예를 들어, 계산 작업이 16 코어에 할당되어 있다면 사용자 측에서 실행중인 스레드에 부정적인 영향을 미칩니다. 맞습니까?

+2

이유를 설명 할 수 있습니까? – davmac

답변

5

수 없습니다. JVM은 모든 하드웨어를 가상화하므로 그렇게 할 수 없습니다.

일부 특정 아키텍처와 일부 특정 JVM에서 작동하는 '트릭'이있을 수 있지만 모두 hackish하고 신뢰할 수 없습니다.

1

아니요 OS 스케줄러가 스레드를 코어에 할당하기 때문에이 작업을 수행 할 수 없습니다. Java 애플리케이션이 실행되는 JVM에는 액세스 할 수 없습니다.

1

하지 않아야합니다. 당신이 정말로, 당신은 기본 전화 사용하려는 경우

: Java thread affinity

하지만 실제로는을,이 작업을 수행하는 좋은 이유가해야합니다. 왜 그것이 좋은 생각이라고 생각하니?

+0

동일한 서버에서 일부 백그라운드 작업 (계산 집약적)과 일부 사용자 작업을 처리 할 수 ​​있기를 바랄 수 있습니다. 사용자 측에 부정적인 영향을 미치기를 원하지 않습니다. 예를 들어, 계산 작업이 16 코어에 할당되어 있다면 사용자 측에서 실행중인 스레드에 부정적인 영향을 미칩니다. 맞습니까? –

+0

그게 나쁜 이유 야. 프로세서 사용을 제한하기 위해 컴퓨터를 관리 할 수 ​​있습니다.이 작업은 핵심을 벗어나지 않고 볼 수 있습니다. –

+0

@ JacksonTale 기본적으로 GUI 스레드에 가장 높은 우선 순위를 부여하면 좋을 것입니다. '스레드 t = 새 스레드 (...); t.setPriority (Thread.MAX_PRIORITY); t.start();' – bezmax

2

이것에 대한 귀중한 개발 시간을 낭비하지 마십시오. 다른 문제를 수정하십시오. OS core menagement에 걸린 시간이 앱의 문제인 경우, 어쨌든 오류가 발생하는 경우가 있습니다.

관련 문제