대부분의 언어/프레임 워크에서 스레드가 다른 스레드에 제어 권한을 부여 할 수있는 방법이 있습니다. 그러나 스레드로부터 수익을내는 것이 주어진 문제에 대한 올바른 해결책이라고 생각할 수는 없습니다. 일반적으로 Thread.yield()
, sleep(0)
등을 사용해야 할 때?일반적으로 쓰레드가 언제 생성되어야합니까?
답변
하나의 사용 사례는 동시 프로그램을 테스트하는 데 사용할 수 있습니다. 동기화 패턴의 결함을 나타내는 인터리브를 찾으십시오. 자바 예를 들어 :
보다 효과적으로 그러므로 interleavings 수, 증가 프로그램의 상태 공간을 탐험을위한 유용한 트릭, 이다 사용
Thread.yield
더 많은 컨텍스트를 장려하기 작업에 대한 액세스 중에 전환 공유 상태. (이 기법의 효과는 플랫폼에 따라 다릅니다. JVM은 no-op [JLS 17.9]로 THREE.yield를 처리 할 수 있으므로 이 짧지 만 0이 아닌 잠자기를 사용하면 속도가 느리지 만 안정적입니다.) - JCIP 자바 관점에서 또한
흥미 시맨틱이 정의되지 않은 것이있다 :
의미론
Thread.yield
(및Thread.sleep(0)
)는 정의되지의 [JLS 17.9]; JVM은 no-ops로 구현하거나 스케쥴 힌트로 을 처리 할 수 있습니다. 특히, 그들은 유닉스 시스템에서 sleep (0)의 의미를 가질 필요가 없습니다. 우선 순위의 실행 대기열 끝에있는 의 현재 스레드 의 다른 스레드로 동일한 우선 순위를 갖는 일부 JVM이 이 방법. - JCIP
이렇게하면 신뢰성이 떨어집니다. 이것은 일반적으로 내가 다음 믿는다에서 사실이다, 그러나 매우 자바는 특정 :
은 모두 가예약 주문에 영향을 사용할 수있는 낮은 수준의 메커니즘입니다. 이것이 특정 기능을 수행하는 데 사용되면이 기능은 오히려 나쁜 생각 인 OS 스케줄러의 확률을 기반으로합니다. 대신 높은 수준의 동기화 구문으로 관리해야합니다.
테스트 목적이나 특정 상태로 프로그램을 강제 실행하는 데는 유용한 도구처럼 보입니다.
운영 체제 스케줄러가 당신을 위해 계속 결정합니까?
sleep (0)이 절대적으로 필요한 경우와 일치 할 때까지 절대로 절대로 절대로 절대로 (0) 절대로 절대로 기록하지 마십시오.
컨텍스트 스위치가 너무 비싸서 많은 사람들이 더 많은 컨텍스트 스위치를 원한다고 생각하지 않습니다.
'sleep (0)이 절대적으로 필요한 경우와 일치하고 여기에 문서화 할 때까지 절대 절대로 절대로 절대로 (0) 절전하지 않습니다.' - 오, 우리 아기끼리 가질 수 있을까? (나는 남성이다). –
일반적으로 Thread.yield(), sleep (0) 등을 사용해야합니까?
VM에 따라 달라지는 것은 스레드 모델입니다.나에 대한 대답은 거의 경우 희소하다.
전통적으로 일부 스레드 모델은 비 선점 형이었고 다른 모델은 성숙하지 않았으므로 Thread.yield()
이 필요합니다.
나는 이 C에서 register
을 사용하는 것과 같다. 우리는 프로그래머가 컴파일러보다 더 좋았 기 때문에 우리 프로그램의 성능을 향상시키는 데 의존했다. 그러나 현대의 컴파일러는 이고,보다 더 똑똑한입니다. 요즘은 프로그래머가 실제로 register
과 Thread.yield()
을 사용하여 프로그램의 성능을 향상시킬 수 있습니다.
- 1. 일반적으로 CollectionView.Refresh()는 언제 필요합니까?
- 2. iPhone - 비추천 메소드는 일반적으로 언제 폐기됩니까?
- 3. 리눅스에서 자바 쓰레드가 자고있다
- 4. URL은 웹 팸을 위해 동적으로 생성되어야합니까?
- 5. 하나의 스레드에서 쓰레드가 쓰레드가 하나의 테이블에 쓰고 다른 쓰레드가 다른 테이블에서 데이터를 액세스하고있다
- 6. 메인 쓰레드가 하스켈에서 모든 자식 쓰레드가 끝나기를 기다리는 방법
- 7. 자바 쓰레드가 시작되지 않는다
- 8. 자바 쓰레드가 어떻게 알리는가?
- 9. 자바에서 쓰레드가 어떻게 작동합니까?
- 10. 공항 동기화 - 쓰레드가 걸림
- 11. Java 쓰레드가 적절하게 해제됩니다.
- 12. android에서 쓰레드가 작동하지 않는다.
- 13. NSOperationQueue 쓰레드가 느리게 디스패치됩니까?
- 14. 쓰레드가 simultaniously로 실행 중임
- 15. 활동이 끝나면 쓰레드가 죽는가?
- 16. 안드로이드 쓰레드가 작동하지 않습니다.
- 17. 자바에서 쓰레드가 NullPointerException을 받고있다
- 18. 는 일반적으로
- 19. 일반적으로 TF-IDF는 정확도를 언제 낮 춥니 까?
- 20. 레이아웃을 모달보기 (또는 일반적으로 모든보기)에서 언제 설정해야합니까?
- 21. 쓰레드가 아닌 수신기가있는 배터리 수준을 결정하십시오.
- 22. 일반적으로
- 23. facescontext가 쓰레드가 끝나기 전에 풀어진다.
- 24. 쓰레드가 알림으로 깨어 나지 않았습니다.
- 25. 쓰레드가 같은 파일에 쓰지 못하도록하기
- 26. 안드로이드 쓰레드가 때때로 시작되지 않는다
- 27. 쓰레드가 끝나기 전에 어떻게 멈추게합니까?
- 28. Ruby 쓰레드가 자지 않고 끝났습니다.
- 29. GUI에서 쓰레드가 줄고있는 GUI가 있음
- 30. 동적으로 생성 된 웹 페이지는 얼마나 빨리 생성되어야합니까?
위로 싱글 태스킹 시스템 위에 멀티 스레드 커널을 작성하는 경우, 정확히이 목적을 위해 타임 슬라이스 기간을 제어하는 디버깅 도구가 있습니다. 몇 가지 기계 지침마다 선제 적 비 분산을 강요 할 때 스레드 안전 코드가 얼마나 많이 충돌 할 것인지 놀라 울 정도입니다. 유용하지 않은 것은 그 속도로 완료되지만, 당신은 확실히 버그를 찾는다! –
@RossPatterson 실제로 그것에 대해 듣기 좋은 곳입니다. –