2014-01-09 2 views
2

비동기 I/O 등으로 반응 형 프로그래밍 기술을 배우고 있으며, 스레드를 전환하지 않는 이점에 대한 정통성있는 비교 데이터를 찾을 수 없습니다.자바 쓰레드 스위치는 얼마나 걸립니까?

명백하게 스레드를 전환하는 것은 계산에 비해 "고가"입니다. 그러나 우리는 어떤 규모로 이야기하고 있습니까?

중요한 질문은 "얼마나 많은 프로세서 사이클/명령어가 자바 스레드를 전환하는 데 걸리는가?"입니다. (범위가 필요합니다)

OS에 영향을 받습니까? 스레드 수에 따라 영향을받는다고 가정합니다. 비동기 IO가 블로킹보다 훨씬 좋은 이유입니다. 스레드가 많을수록 컨텍스트가 더 멀리 캐시에 저장되어야합니다.

비록 길 (방법)이 오래되었지만 관련 프로세서 사이클 (네트워크는 "지침", SSD 디스크가 적게 걸림)에 유용 할 수 있습니다. 코멘트

참고을 환영 - -

너무 나는 반응 응용 프로그램 (서버 당) 초당 10,000의 요청으로 1000 년대에서 이동하는 웹 응용 프로그램을 사용하도록 설정하는 것이 이해하지만 알 어렵다 내가 아는 문맥 전환의 속도에 영향을 줄 수있는 입력에 대해서는 거의 알지 못하기 때문에 이것은 막연하고 쓸모없고 멍청한 질문입니다. 아마도 통계적 답변이 도움이 될 것입니다. 예를 들어, 스레드의 60 % 이상이 전환하는 데 100-10000 프로세서 사이가 걸릴 것이라고 추측 할 수 있습니다.

+0

y 직접 측정하지 마시고 우리와 공유 하시겠습니까? 그것은 유용 할 것이다! – Rugal

+0

벤치마킹에는 어려움이 따른다. [Google caliper] (https://code.google.com/p/caliper/)를 사용하지 않으면 완전히 엉망이 될 것이라는 것을 알고 있지만 스레드 전환은 매우 어렵다고 생각합니다. 지정하십시오. 나는 _typical_ 값을 찾고있는 응용 프로그램 (primarly web 나는 추측한다)을 쉽게 설정할 수 없습니다. 유용하게 벤치마킹하려면 성능에 영향을 미치는 차원을 알아야하고 로컬 참조 수, 레지스터 수, 캐시 크기, 스레드 수, 잠금, 공유 변수 등을 추측 할 수 있습니다. – Stephen

답변

1

루갈이 포인트를가집니다. 현대 아키텍처에서 이론적 인 턴어라운드 시간은 하드웨어와 소프트웨어가 훨씬 더 복잡해 졌기 때문에 보통 실제 측정과는 거리가 멀습니다. 또한 본질적으로 응용 프로그램에 따라 다릅니다. 예를 들어 많은 웹 응용 프로그램은 컨텍스트 전환 시간이 훨씬 중요한 I/O 바인딩입니다.

또한 context switching (스레드 전환이라고도하는)은 Java가 아닌 OS입니다. OS의 컨텍스트 스위치가 얼마나 무거울 지에 대한 보증은 없습니다. kernel-level switch을 수행하기 위해 수십만 CPU 사이클이 아니라면 수십 만 가지가 걸렸지 만 user-level switches뿐만 아니라 커널 레벨 스위치까지도 수 백 사이클이 소요되는 실험 시스템이 있습니다.

+0

좋은 시작입니다. 나는 "Java thread"라는 용어를 사용하고 있습니다. 프로세스 전환보다 (역사적으로) 더 빠르다는 것을 알지만 컨텍스트 스위치와 완전히 동일합니까? 귀하의 두 번째 단락에서 "Java 스레드 컨텍스트 전환"이 "일반 컨텍스트 전환"대신에 좋은 제한이라고 나와 있습니다. – Stephen

+2

@Stephen Java는 저수준 시스템 스레드에 대해 고수준 API를 제공하기 만합니다. JVM 소스 코드를 살펴보면 Thread 클래스가 기본 [sys calls] (https://en.wikipedia.org/wiki/System_call)을 호출한다는 것을 알 수 있습니다. 그건 [* nix에 pthreads] (http://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads)입니다.html) 및 해당 [Windows의 해당 부분] (http://msdn.microsoft.com/ko-kr/library/windows/desktop/ms682516(v=vs.85)asp)을 참조하십시오. – Domi

+1

아 아 맞다 - 내가 알고있는 용어이다 (몇 년 전부터)) – Stephen

관련 문제