Java 호출 스택을 수정하거나 액세스 할 수 있습니까? 예를 들어 저장하고 복원 하시겠습니까? 나는 협업 멀티 태스킹 (특히 I/O)을 python 또는 haskell (기본적으로이 작업을 수행함)과 같이 gevent와 같이 구현하려고 생각합니다. 비동기 콜백 스파게티 엉망은 최고의 솔루션이 될 수 없습니다.Java 호출 스택을 설정하십시오.
0
A
답변
0
가장 간단한 해결책은 다중 스레드를 만드는 것입니다. 한 서버에서 최대 10,000 개의 스레드를 효율적으로 실행할 수 있습니다. 이보다 더 많은 것을 원한다면, 나는 a) 두 번째 서버를 구입하거나 b) non-blocking IO를 사용할 것을 제안 할 것이다.
일반적으로 다중 스레드를 사용하는 것이 가장 간단하며 스레드 수가 적 으면 가장 빠릅니다.
다양한 방식으로 Java에서이를 수행 할 라이브러리가 있습니다. 그들은 모두 공통의 문제로 고통을 겪습니다. 느려지거나 훨씬 복잡하거나 두 가지입니다.
BTW 스레드 컨텍스트 전환시 정확히 사용자가 제안한 바를 수행하지만 OS가이를 수행하므로이 점을 확인합니다.
관련 문제
- 1. 호출 스택을 빠르게 캡처하십시오.
- 2. 최대 호출 스택을 초과했습니다.
- 3. 호출 스택을 파일에 로깅
- 4. 호출 스택을 보유한 개인 메서드 호출
- 5. Control.EndInvoke는 예외를위한 호출 스택을 재설정합니다.
- 6. gdb로 표시된대로 호출 스택을 생성
- 7. Visual Studio에서 호출 스택을 기록합니다.
- 8. Java GUI에서 색상을 설정하십시오.
- 9. 호출 스택을 캡처하여 다른 스레드에서 실행하도록하십시오.
- 10. MAXIMA에서 전체 호출 스택을 인쇄하려면 어떻게해야합니까?
- 11. 호출 스택을 통한 하나의 SQL 컨텍스트 연결
- 12. 메서드 수정없이 호출 스택을 통해 데이터 전달
- 13. 이 프로그램에서이 호출 스택을 해결하는 방법
- 14. Python tkinter가 호출 스택을 증가시키고 있습니까?
- 15. Valgrind에서 전체 호출 스택을 얻는 방법은 무엇입니까?
- 16. Windows에서 호출 스택을 가져올 수 없습니다.
- 17. ClrStack은 관리되지 않는 호출 스택을 표시합니다.
- 18. FaultException의 전체 호출 스택을 얻는 방법
- 19. UI 스레드에서 호출/스택을 추적하려면 어떻게해야합니까?
- 20. 호출 스택을 로깅 형식으로 사용할 수 있습니다.
- 21. Android Studio에서 호출 스택을 보는 방법은 무엇입니까?
- 22. Javascript에서 최대 호출 스택을 늘리는 방법은 무엇입니까?
- 23. oprofile 출력에서 호출 스택을 얻는 방법은 무엇입니까?
- 24. AS3 : 거대한 호출 스택을 만들지 않고 함수를 순차적으로 호출
- 25. MagicalRecord : 전체 데이터를 제거하고 코어 데이터 스택을 다시 설정하십시오.
- 26. N-Queens, LinkedList 스택을 사용하는 Java
- 27. Java : 하나의 대기열에 스택을 구현하면 문제가 발생합니까?
- 28. Java 메소드 호출을위한 CPU/스택을 제한 하시겠습니까?
- 29. Java - 여러 스택을 사용하여 '실행 취소'방법 허용
- 30. JAVA_HOME을 Java 설치의 루트로 설정하십시오.
10,000 명이 꽤 좋을 것입니다. 하지만 나는 그런 엄청난 양의 쓰래드가 문맥 전환 (context switch)을 의미한다고 생각했다. 스레드가 통신 할 필요가있을 때 이것은 더욱 악화됩니다. 경량 스레드는 커널 잠금 등을 포함하는 컨텍스트 스위치가 없기 때문에 훌륭합니다. 실제로 자바가 프로그래밍 방식으로 스택에 액세스 할 수 있다면 꽤 간단합니다. 싸구려 네이티브 OS 스레드의 개념을 좋아하지만 이것이 가능하다고 생각하지 않습니다. 편집 : 다음 경량 스레드 비동기 IO를 사용하여 관리 할 수 있습니다. – Kr0e
Java 스레드가 커널 스레드 일 필요는 없습니다. JVM은 원하는대로 스레딩을 구현할 수 있으며 스레드 풀링이 일반적입니다. 실시간 호출 스택을 수정하는 것은 VM을 다시 작성하는 것과 기본적으로 동일하며 Java 자체에서이를 수행 할 방법이 없습니다. VM 에이전트는 그렇게 할 수 있지만 이미 사용할 수있는 디버깅 및 튜닝 된 스레드 구현을 사용하면 훨씬 편리합니다. – chrylis
첫 번째 JVM (1.1) 중 하나의 커널 스레드를 사용하지 않는 JVM을 인식하지 못합니다. 그러나 그들은 커널 스레드로 상당히 빠르게 변했습니다. 따라서 JVM 구현이 경량 스레드를 지원할 가능성은 거의 없습니다. 네트워크 응용 프로그램의 경우 녹색 스레드를 사용하면됩니다. 불행히도 Haskell, Go, C# 같은 그린 스레드를 지원하는 언어는 단지 소수의 언어 뿐이며 (C# 일종의 가짜 Haskell이나 Go가 아닌), Python은 Gevent를 사용합니다. 글쎄, 10 억 라인의 콜백 스파게티 코드 = ( – Kr0e