여기서는 상충되는 의견을 읽습니다. 비동기 메서드 호출은 사용자에게 보이지 않는 스레드 풀에서도 처리되지만 IO 운영 체제 호출이 보류중인 동안 기본 운영 체제가 이러한 스레드를 일시 중단 할 수 있으므로 리소스를 절약 할 수 있습니다.비동기 메서드 호출을 사용하면 .net 스레드를 통한 성능이 향상됩니까
답변
당신이 옳습니다. 입출력 스레드는 일시 중단 될뿐만 아니라 불필요하게 될 때 폐기됩니다. 그러나 비동기 IO는 모든 문제에 대한 일반적인 해결책이 아니며 이유는 다음과 같습니다.
- 비동기 알고리즘은 코딩하기가 어렵습니다. 비동기 코드는 동기 변형보다 복잡하고 오류가 발생하기 쉽습니다.
- IO 완료 콜백은 특수 IO 스레드에서 작동하며 프로그래머는 이러한 스레드를 가능한 많이 무료로 유지해야합니다. 그렇지 않으면 시스템의 속도가 크게 느려집니다. 따라서 비동기 IO로 이동하면 실제 데이터 처리를 위해 Producer-Consumer 패턴을 구현할 준비가됩니다.
- 150 개 미만의 병렬 연결로 수요가 있고 응용 프로그램이 PC 시스템에서 실행되는 경우 동기식 구현은 낮은 행잉이됩니다 프로그래밍의 용이성과 만족스러운 성능을 동시에 제공하는 과일
+1 async의 단점. –
비동기 프로그래밍은 위에서 설명한 것처럼 조심스럽게 수행해야합니다. 새로운 5.0 기능을 사용하면 비동기가 매우 쉽고 표현력이 풍부 해집니다. 나는 Eric Lippert의 기사를 읽고 무슨 일이 일어나는지 이해할 것을 제안한다. http://blogs.msdn.com/b/ericlippert/archive/2010/10/29/asynchronous-programming-in-c-5-0-part-two -whence-await.aspx 그는 또한 비동기에 관한 몇 가지 좋은 점도 언급합니다. 나는 이것이 미래라는 것을 알고 있지만,이 Q & A를 기반으로하면 도움이 될 것 같았다. :) –
가능하면 .net 4.0 System.Threading.Tasks.Parallel 클래스를 사용합니다. 멀티 코어 프로세서를 활용할 것입니다.
그리고 간단합니다.
'비동기 메서드 호출은 또한 스레드 풀에서 사용자에게 보이지 않게 처리됩니다.'예, 뭔가가 I/O를 수행해야합니다!
'I/O가 보류 중일 때 OS가 사용자 스레드를 일시 중단 할 수있는 반면 기본 운영 체제가 IO 호출이 보류 중일 때 이러한 스레드를 일시 중단 할 수 있기 때문에 자원을 절약 할 수 있습니다.
고성능 응용 프로그램에서는 더 나은 스레드 관리가 가능한 커널에 더 많은 작업을 밀어 넣기 때문에 비동기 성이 발생합니다. 이것은 컨텍스트 스위치를 줄이고 많은 데이터 복사를 피할 수 있습니다.
- 1. 로깅 용으로 별도의 스레드를 사용하면 성능이 향상됩니까?
- 2. Smarty + Caching을 사용하면 성능이 향상됩니까?
- 3. 스레딩을하면 성능이 향상됩니까?
- 4. .NET COM Interop에서 팩토리 메서드를 사용하면 성능이 향상됩니까?
- 5. .net 2.0에서 4.0으로 업그레이드하면 성능이 향상됩니까?
- 6. 압축하면 성능이 향상됩니까?
- 7. 롤백으로 성능이 향상됩니까?
- 8. 인터페이스에 입력하면 성능이 향상됩니까?
- 9. 줄무늬 기술로 성능이 향상됩니까?
- 10. ASP.NET에서 비동기 메서드 호출을 호출하십시오.
- 11. 비동기 메서드 호출을 기다리는 중
- 12. 단일 메서드 호출을 통한 대화
- 13. 메서드 호출을 통한 메모리 관리
- 14. 메서드 호출을 한정하면 Java에서 성능이 저하됩니까?
- 15. 클러스터 된 인덱스 열에 비 클러스터형 인덱스를 사용하면 성능이 향상됩니까?
- 16. 64 비트 톰캣을 사용하면 32 비트 톰캣보다 성능이 향상됩니까?
- 17. 람다 함수에서 [=] 대신 [this]를 사용하면 성능이 향상됩니까?
- 18. iOS OpenGL 앱에서 속성 대신 ivar를 사용하면 성능이 크게 향상됩니까?
- 19. PHP 최적화 - foreach 루프에서 array_keys()를 사용하면 성능이 향상됩니까?
- 20. 여러 쿼리 대신 하나의 조인 된 쿼리를 사용하면 성능이 향상됩니까?
- 21. CF 9에 내장 된 ORM을 사용하면 성능이 향상됩니까?
- 22. 같은 양의 수업을 위해 파일을 적게 사용하면 성능이 향상됩니까?
- 23. if() else if()를 사용하여 switch 문을 사용하면 성능이 향상됩니까?
- 24. 코어 데이터 : 백그라운드를 가져오고 메인 스레드에서 objectWithID를 사용하면 성능이 향상됩니까?
- 25. SAS 데이터 세트의 KEEP 옵션을 사용하면 읽기 성능이 향상됩니까?
- 26. 비동기 메서드를 호출하여 동기화 메서드 호출을 호출합니다.
- 27. 쿼리에서 .readonly를 설정하면 성능이 향상됩니까?
- 28. EJB를 제거하면 프로젝트 성능이 향상됩니까?
- 29. SqlCommand.Cancel()로 인해 성능이 향상됩니까?
- 30. Redis 지속성을 비활성화하면 성능이 향상됩니까?
많은 스레드가 상수 컨텍스트 전환이 필요합니다. – diolemo
제목에 ".net"등의 접두어를 붙이지 마십시오. 그것이 바로 태그가있는 것입니다. –
많은 준비 스레드는 상수 컨텍스트 전환이 필요합니다. –