2013-05-15 3 views
1

많은 입력 파일을 처리 할 Windows 서비스를 작성 중입니다.많은 동시 작업을 처리하기 위해 비동기 또는 작업을 사용해야합니까?

내 질문은 내가 동시 스레드의 수를 제한 할 수 Task를 사용하여 사용자 지정 라이브러리를 작성하는 경우는 내가 asyncawait를 사용하거나할지 여부입니다.

은 내가 200 개 스레드를 대기하는 경우, 그것은 (등, 등, 상황은 CPU의 전환, 자원에 대한 다양한 전투) 한 번에 10 실행시키는 것보다 모든 것을 완료하는 데 시간이 더 걸리는 것은 사실

알고 그래서 제 질문은이 새로운 신기한 기능 asyncawait 더 이상 실행 탄력, 또는 난 그냥 내 자신의 사용자 정의 라이브러리를 작성해야하는지 여부입니까 ??

+4

나는 이미 많은 것을 가지고있는 TPL을 사용하지 않는다는 것을 알지 못한다. 만약 당신이 I/O 기반이라면 10 개의 쓰레드를 원하지 않을 수도 있습니다. 당신은 TPL Dataflow도 봐야합니다. –

+1

최근에 TPL Dataflow를 조사하기 시작했습니다.이 작업에 대한 좋은 후보자로 보입니다. +1 –

+1

thanks @JonSkeet. 나는 당신만큼 훌륭 할뿐만 아니라 아마도 최신의 가장 위대한 프레임 워크에 조금 뒤떨어져 있습니다. TPL 데이터 흐름을 파헤칩니다 :) – Steve

답변

6

는 I/O 기반 작업을 수행하는 경우, asyncawait은 중대하다. 는 Win32 서비스, 당신은 SynchronizationContext이없는, 그래서 모든 연속성을로드 밸런싱의 큰 일을 스레드 풀에 작업로 끝낸다. (!, Task = Thread을 기억하십시오 Task의 수백 또는 수천이 잘됩니다). 당신이 CPU 기반 작업을 수행하는 경우

후 나는 작업 병렬 라이브러리를 권하고 싶습니다. 특히 Parallel 유형입니다. PLINQ는 사용하기가 더 쉽지만 기본적으로 모든 코어를 사용할 수 있다고 가정합니다. Win32 서비스를하고 있기 때문에 리눅스 용어를 사용하는 것이 더 좋을 것입니다.

TPL 데이터 흐름은 다음 단계로 async/await이 걸리는 훌륭한 라이브러리입니다. 솔루션에서 TPL 데이터 흐름 기반 접근 방식을 사용할 수있는 것처럼 들립니다. async, TPL 및 TPL Dataflow간에 "혼합 및 일치"할 수도 있습니다.

관련 문제