나는 모든 가능한 결과를 얻으려고하는 프로그램을 만들고 있습니다. 프로그램의 스레드는 더 많은 스레드를 생성합니다 (천 개가 조금 넘음). 나는 정말로 멀티 쓰레딩에 나쁘다. 나는 쓰레드의 생성이 멈추지 않을 것을 두려워한다. 이클립스 IDE는 종료 버튼을 가지고 있는데, 실행중인 모든 스레드를 멈추게 할 것인가? JVM이 이것을 처리 할 수 있습니까?Java에서 1K 개 이상의 스레드를 실행하는 것이 안전합니까?
답변
예. 이클립스 실행 종료 JVM에서 종료 버튼을 클릭하면 해당 JVM이 중단되고 실행중인 모든 스레드가 중지됩니다 (JVM 프로세스 종료와 마찬가지로).
천 개의 스레드를 실행하는 경우에는 권장하지 않습니다 ... 각 스레드가 n
개의 CPU 코어에서 최대 ~ n/1000 시간 만 실행할 수 있기 때문에 매우 느린 방식으로 들립니다.
감사합니다. Frisch, 저를 도왔습니다. : D – dark32
그러나 I/O 코드를 차단하는 것이 좋습니다. –
실제로 Java 프로그래밍 언어로 1000 개 이상의 스레드를 열지 않아도됩니다. 그러나 문제는 그것이 작업을 느리게 할 것입니다.
스레드의 작동 방식을 알고 있습니까? 스레드는 OS의 도움으로 환경을 생성하므로 응용 프로그램 사용자는 프로그램이 병렬로 실행되고 있다고 느낄 수 있습니다. 그러나 실제 시나리오는 다릅니다. 단일 코어 프로세서를 갖는 컴퓨터는 즉시 한 동작을 처리 할 수 있습니다. 우리의 OS는 하나씩 하나씩 운영을 보냅니다. 그래서 우리는 사용자가 자신들이 동시에 운영되고 있다고 느낄 수 있습니다.
예를 들어 세 가지 스레드 응용 프로그램을 고려해 보겠습니다. 각 쓰레드는 for 루프를 가지고있다. 첫 번째 스레드는 루프 내부의 숫자를 추가하고 result1이라는 변수에 결과를 저장하고 두 번째 스레드는 루프 내부의 숫자를 곱하고 그 결과를 result2라는 변수에 보관하며 세 번째 스레드는 루프 내부의 숫자를 뺀 다음 이름이 지정된 변수에 결과를 보관합니다. result3.
이제 모든 스레드가 같은 순간에 시작되고 모두가 같은 우선 순위를 갖게되면 OS는 하나씩 명령을 전송합니다. If는 result1로 추가 할 번호를 보낼 수 있습니다. 다음 순간에 결과를 곱하기 위해 숫자를 보낼 수 있습니다. 다음 순간에 결과를 빼기 위해 숫자를 보낼 수 있습니다 3. 다음 순간에 다시 추가 할 수 있습니다.
즉, 실제로 단일 코어 프로세서는 3 가지 계산을 동시에 계산할 수 없습니다. 그것은 하나의 계산을 계산하고 나머지 것들을 멈추게하고 이런 식으로 진행합니다.
이제 1000 스레드를 실행하면 전체 프로세스가 느려지는 것을 알게되었습니다. 언급 된 작업에서 성능이 문제가 아니며 출력 만 필요하면 1000+ 스레드를 실행할 수 있습니다.
그러나 개선 된 성능이 필요한 경우 다른 것을 생각해야합니다. Map Reduce에 대해 열심히 있으십니까? Hadoop 프레임 워크로 맵 축소를 구현하면 이러한 유형의 문제에서 더 나은 성능을 얻을 수 있습니다. 그러나, 먼저 맵 축소 프레임에서 문제점을 설계해야합니다. 그리고이 프레임 워크는 둘 이상의 컴퓨터를 사용하여 동시에 작업을 계산합니다.
다른 해결책이 우선 순위를 설정할 수 있습니다. 자바에서는 스레드에서 우선 순위를 설정할 수 있습니다. 중요한 작업에 간단한 작업보다 높은 우선 순위를 부여 할 수 있습니다. 우선 순위가 높은 태스크와 낮은 태스크로 문제의 태스크를 구별 할 수 있다면 성능을 더 정확하게 파악할 수 있습니다.
- 1. 두 개 이상의 스레드를 그룹화하십시오.
- 2. 루프에 새 스레드를 만드는 것이 안전합니까?
- 3. BroadcastReceiver에서 새 스레드를 시작하는 것이 안전합니까?
- 4. 이 파일 검색 스레드를 중단하는 것이 안전합니까?
- 5. Cocos2D 프로젝트에서 3 개 이상의 타이머를 실행하는 것이 좋지 않습니까?
- 6. 한 번에 두 개 이상의 활동을 실행하는 것이 좋습니다?
- 7. Java에서 상대적 경로를 사용하는 것이 안전합니까?
- 8. sudo를 사용하여 루비 스크립트를 실행하는 것이 안전합니까?
- 9. 사용자 입력 식을 IronPython으로 실행하는 것이 안전합니까?
- 10. 루트 계정에서 cron 작업을 실행하는 것이 안전합니까?
- 11. Java에서 비동기 적으로 여러 스레드를 실행하는 방법
- 12. Java에서 스레드를 실행하는 가장 좋은 방법은 무엇입니까?
- 13. 완료 할 때 1K 스레드를 시작하고 동일한 작업에서 스레드를 계속 실행하는 방법
- 14. 두 개 이상의 상태를 실행하는 각도 ui.router
- 15. 바람둥이 전화를 방해하는 것이 안전합니까
- 16. WCF : 비동기 작업자 스레드를 서버에 생성하는 것이 안전합니까?
- 17. 단일 파이썬 프로세스에서 녹색 스레드와 원시 스레드를 혼합하는 것이 안전합니까?
- 18. 한 번만 생성되는 수백 개의 스레드를 사용하는 것이 안전합니까?
- 19. async를 사용하여 스레드를 제거하고 미래의 범위를 벗어나는 것이 안전합니까?
- 20. Lambda를 통해 2 개 이상의 변수를 새 Task (Thread)에 전달하는 것이 안전합니까?
- 21. 6 개 이상의 스레드를 사용할 때 상당한 성능 저하가 발생했습니다.
- 22. CUDA에서 32 개의 스레드를 여러 개 실행하는 이유는 무엇입니까?
- 23. NSThread를 공개하는 것이 언제 안전합니까?
- 24. 5 개 이상의 스레드를 시작하면 VB.NET 응용 프로그램이 작동하지 않습니다.
- 25. 각 스레드가 Java에서 실행하는 시간을 제어하는 것이 가능합니까?
- 26. Java에서 스레드를 사용하여 애니메이션이있는 둘 이상의 JFrame을 인스턴스화하는 방법은 무엇입니까?
- 27. Java에서 별도의 스레드를 사용하여 둘 이상의 webservice를 호출 하시겠습니까?
- 28. 두 개 이상의 Perl 프로그램을 병렬로 실행하는 방법 - 두 개 이상의 .pl 파일 사용
- 29. Java에서 비트 연산의 기본 유형을 특정 크기로 가정하는 것이 안전합니까?
- 30. Java에서 Double Checking Locking Singleton을 사용하는 것이 안전합니까?
예,'JVM'을 종료하면 모든 스레드가 실행을 멈 춥니 다 – Abhishek
이 높은 수의 스레드를 만들면 어떤 이점이 있습니까? (성능 저하가 나타납니다.) –
1000 개 이상의 스레드를 실행할 수 있지만 결국에는 각 개별 스레드를 실행하기 위해 1000 개 이상의 코어가 없습니다 – smac89