2012-03-02 5 views
1

여기서는 상충되는 의견을 읽습니다. 비동기 메서드 호출은 사용자에게 보이지 않는 스레드 풀에서도 처리되지만 IO 운영 체제 호출이 보류중인 동안 기본 운영 체제가 이러한 스레드를 일시 중단 할 수 있으므로 리소스를 절약 할 수 있습니다.비동기 메서드 호출을 사용하면 .net 스레드를 통한 성능이 향상됩니까

+1

많은 스레드가 상수 컨텍스트 전환이 필요합니다. – diolemo

+0

제목에 ".net"등의 접두어를 붙이지 마십시오. 그것이 바로 태그가있는 것입니다. –

+0

많은 준비 스레드는 상수 컨텍스트 전환이 필요합니다. –

답변

1

당신이 옳습니다. 입출력 스레드는 일시 중단 될뿐만 아니라 불필요하게 될 때 폐기됩니다. 그러나 비동기 IO는 모든 문제에 대한 일반적인 해결책이 아니며 이유는 다음과 같습니다.

  • 비동기 알고리즘은 코딩하기가 어렵습니다. 비동기 코드는 동기 변형보다 복잡하고 오류가 발생하기 쉽습니다.
  • IO 완료 콜백은 특수 IO 스레드에서 작동하며 프로그래머는 이러한 스레드를 가능한 많이 무료로 유지해야합니다. 그렇지 않으면 시스템의 속도가 크게 느려집니다. 따라서 비동기 IO로 이동하면 실제 데이터 처리를 위해 Producer-Consumer 패턴을 구현할 준비가됩니다.
  • 150 개 미만의 병렬 연결로 수요가 있고 응용 프로그램이 PC 시스템에서 실행되는 경우 동기식 구현은 낮은 행잉이됩니다 프로그래밍의 용이성과 만족스러운 성능을 동시에 제공하는 과일
+0

+1 async의 단점. –

+0

비동기 프로그래밍은 위에서 설명한 것처럼 조심스럽게 수행해야합니다. 새로운 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를 기반으로하면 도움이 될 것 같았다. :) –

0

가능하면 .net 4.0 System.Threading.Tasks.Parallel 클래스를 사용합니다. 멀티 코어 프로세서를 활용할 것입니다.

그리고 간단합니다.

0

'비동기 메서드 호출은 또한 스레드 풀에서 사용자에게 보이지 않게 처리됩니다.'예, 뭔가가 I/O를 수행해야합니다!

'I/O가 보류 중일 때 OS가 사용자 스레드를 일시 중단 할 수있는 반면 기본 운영 체제가 IO 호출이 보류 중일 때 이러한 스레드를 일시 중단 할 수 있기 때문에 자원을 절약 할 수 있습니다.

고성능 응용 프로그램에서는 더 나은 스레드 관리가 가능한 커널에 더 많은 작업을 밀어 넣기 때문에 비동기 성이 발생합니다. 이것은 컨텍스트 스위치를 줄이고 많은 데이터 복사를 피할 수 있습니다.

관련 문제