자바 스레드 선호도
Java 프로세스 내의 개별 스레드를 특정 CPU 코어 (Linux)로 잠그는 방법을 아는 사람이 있습니까? C에서이 작업을 수행했지만 Java에서 수행하는 방법을 찾을 수 없습니다. 내 본능은 JNI 호출이 필요하지만 여기 누군가가 통찰력을 갖거나 전에 해본 적이 있기를 바랐습니다.
감사!
순수 자바에서는 이것을 할 수 없습니다. 하지만 정말 필요한 경우 JNI를 사용하여 작업을 수행하는 네이티브 코드를 호출 할 수 있습니다. 시작하는 곳은 다음과 같습니다.
http://ovatman.blogspot.com/2010/02/using-java-jni-to-set-thread-affinity.html
http://blog.toadhead.net/index.php/2011/01/22/cputhread-affinity-in-java/
UPD : 몇 가지 생각을 한 후이를위한 고유 한 클래스를 만들기로 결정했습니다. ThreadAffinity.java JNA 기반이며 매우 간단합니다. 따라서 프로덕션에서 사용하려면 시간을 들여 제작해야 할 수 있습니다. 더 안정적이지만 벤치마킹 및 테스트를 위해 잘 작동합니다.
UPD 2 : 자바에서 스레드 선호도와 작업하기위한 또 다른 라이브러리 가 있습니다 . 이전에 언급 한 것과 동일한 방법을 사용하지만 다른 인터페이스가 있습니다.
나는 그것이 오래되었다는 것을 알고 있지만 누군가이 스레드를 발견하면이 문제를 해결하는 방법은 다음과 같습니다. 다음을 수행하는 스크립트를 작성했습니다.
- "jstack -l"
- 결과를 가져 와서 수동으로 코어에 잠 그려는 스레드의 "nid"를 찾으십시오.
- 그 스레드를 Taskset합니다.
https://github.com/peter-lawrey/Java-Thread-Affinity/blob/master/src/test/java/com/higherfrequencytrading/affinity/AffinityLockBindMain.java를 살펴볼 수 있습니다.
IMO,이 되지 않습니다 네이티브 호출을 사용하지 않는 한 가능하다. JVM은 플랫폼 독립적이어야하며이를 달성하기 위해 수행 된 모든 시스템 호출은 이식 가능한 코드를 생성하지 않습니다.
불가능합니다 (적어도 일반 Java에서는).
스레드 풀 을 사용하여 다양한 유형의 작업에 사용되는 스레드 (및 코어)의 양을 제한 할 수 있지만 사용할 코어를 지정할 수있는 방법은 없습니다.
Java 런타임이 OS 또는 하드웨어에 대한 기본 스레딩을 지원하지 않을 가능성도 있습니다. 이 경우 녹색 스레드 가 사용되며 전체 JVM에 대해 하나의 코어 만 사용됩니다.
참고 URL : https://stackoverflow.com/questions/2238272/java-thread-affinity
'Nice programing' 카테고리의 다른 글
shade plugin에 의해 생성 된 dependency-reduced-pom.xml의 목적은 무엇입니까? (0) | 2020.12.05 |
---|---|
GCM (현재 FCM)은 제한이 없나요? (0) | 2020.12.05 |
포물선 배낭 (0) | 2020.12.05 |
Jasmine을 사용하여 생성자 감시 (0) | 2020.12.05 |
HTML5 비디오의 경우 mp4 및 ogg로 변환하기위한 ffmpeg 설정 (0) | 2020.12.05 |