많은 API가 비동기 메서드 만 노출하는 방향으로 이동하고 있습니다. 이러한 방법을 즉시 기다려야하는 상황에서 얼마나 많은 성능 저하가 발생합니까? 내가 현재 스레드가 생성 된 스레드에서 완료 될 때까지 기다리는 것으로 가정 할 때 잘못 되었습니까? 또는 CLR이 이러한 시나리오에서 일종의 마법을 수행하고 모두 동일한 스레드에서 실행되도록 만드시겠습니까?즉시 기다리는 비동기 메서드를 호출 할 때 얼마나 많은 성능이 저하됩니까?
답변
"비동기 메서드"로, 나는 비동기 메서드를 기반으로 Task<T>
을 의미한다고 가정합니다.
Task<T>
을 반환하는 메서드가있는 경우 즉시 Wait()
메서드를 호출하면 현재 WaitHandle
개체에서 대기 할 수 있습니다. 이 작업은 다른 스레드에서 실행될 가능성이 높으며 완료 될 때 WaitHandle
신호를 보내 대기 스레드를 해제합니다. 이 시나리오를 내가 알고있는 동기식 호출로 바꾸는 컴파일러 최적화는 없습니다.
물론 이것은 async 메소드와 동등한 동기식 함수를 호출하는 것 이상의 작업입니다. 그러나 유스 케이스에 따라 크게 차이가 없을 것입니다.
더 중요한 질문은 왜 호출 스레드를 차단하여 비동기의 장점을 잃고 싶습니까? 그것은 일반적으로 좋은 생각이 아니므로, 당신은 이것을 할 아주 좋은 이유가 있음을 보장해야합니다.
이것은 작업을 즉시 기다리는 것 외에는 선택의 여지가없는 시나리오입니다. 구체적으로, 나는 'Global.asax'의'Application_PostAuthenticateRequest'에서 이것을하고 있습니다. –
@ w.brian, 내 경험이이 영역에 제한되어 있지만 ASP.NET 4.5 이벤트 처리기에서'RegisterAsyncTask'를 통해'async' 작업을 사용할 수 있다고 생각합니다. [자세한 내용은 http://www.hanselman.com을 참조하십시오. /blog/MagicOfAssingAsynchronousMethodInASPNET45PlusAnImportantGotcha.aspx). – Noseratio
실제로'Task'는 WaitHandle을 사용하지 않고, ManualResetEventSlim을 사용합니다. 그러나 그것은 큰 차이가 아닙니다. – svick
- 1. 많은 선택기를 사용할 때 jQuery 성능이 얼마나 저하됩니까?
- 2. RegisterRoutes 메서드를 사용하면 성능이 저하됩니까?
- 3. 비동기 메서드를 기다리는 중
- 4. 메서드 대신 own 메서드를 호출하면 성능이 저하됩니까?
- 5. 메모리를 dellocating하면 성능이 저하됩니까?
- 6. 정규화로 트래픽이 많은 사이트의 성능이 실제로 저하됩니까?
- 7. MySQL에 빈 테이블이 많은 경우 성능이 저하됩니까?
- 8. 너무 많은 WordPress 후크로 인해 성능이 저하됩니까?
- 9. 많은 수의 이벤트 핸들러를 사용하면 성능이 저하됩니까?
- 10. GLSL에서 함수의 성능이 저하됩니까?
- 11. PHP에서 @ 마크로 인해 성능이 저하됩니까?
- 12. 쓰기 가능한 페이지로 인해 JIT 성능이 저하됩니까?
- 13. IOS (불필요한) 헤더를 가져올 때 성능이 저하됩니까?
- 14. Raphael에서 requestAnimationFrame을 호출하면 성능이 저하됩니까?
- 15. AWSDBProxy를 사용하고 있습니까? 스케일 아웃 할 때 성능이 저하됩니까?
- 16. 리플렉션을 사용하여 Java 클래스의 접근자를 구현하면 얼마나 성능이 저하됩니까?
- 17. HTML5 캔버스 외부의 이미지를 렌더링하면 성능이 저하됩니까?
- 18. @XmlRootElement를 사용하여 클래스에 주석을 추가 할 때 성능이 저하됩니까?
- 19. 메서드를 비동기 적으로 호출
- 20. ViewGroup에서보기가 더 많아지면 성능이 저하됩니까?
- 21. 미디어 쿼리로 렌더링 성능이 저하됩니까?
- 22. 분할로 인해 쿼리 성능이 저하됩니까?
- 23. 데이터베이스를 전용 서버에두면 성능이 저하됩니까?
- 24. 추출 기능으로 인해 성능이 저하됩니까?
- 25. 올바른 방법으로 정상적으로 성능이 저하됩니까?
- 26. 개체에 많은 메서드가있는 경우 개체 인스턴스시 성능이 저하됩니까?
- 27. 많은 양의 데이터를 반환 할 때 데이터베이스 저장 프로 시저의 성능이 저하됩니까? VoltDB 말아야에서
- 28. 은 symfony의 서비스가 너무 많아 성능이 저하됩니까?
- 29. 스크립팅 언어에서 쉘 명령을 호출하면 성능이 저하됩니까?
- 30. TextBox.Clear()의 성능이 시간이 지남에 따라 저하됩니까?
대기를 차단하고 있습니까, 즉 'task.Wait()'또는 비동기식 '대기'즉 '대기중인 작업'입니까? – Noseratio
'task.Wait()'. 이 작업을 수행하는 방법은 '비동기'로 만들 수 없기 때문에 '대기'를 호출 할 수 없습니다. –
왜 비동기 메서드를 호출할까요? 전화 할 동기 버전이 없습니까? 다른 일이 어떻게 시작되는지에 따라 비동기 메소드를 시작하는 방법을 알려주십시오. –