은 내가 비동기 I/O를 활용에서 엄청난 성능 향상을위한 기회가 있다는 것을 시사 돈 사임의 블로그Async.Parallel 또는 Array.Parallel.Map?
에서 읽을 패턴을 구현하기 위해 노력하고있어. 나는 현재 Array.Parallel.Map을 사용하여 한 방향으로 "작동"하는 코드 조각을 가져 와서 Async.Parallel을 사용하여 동일한 결과를 얻을 수 있는지를 확인하려고하지만 실제로 Async.Parallel을 이해하지 못한다. 그리고 일을 할 수는 없습니다.
하나의 코드에 대한 데이터 배열을 성공적으로 검색하는 코드 조각 (요점을 설명하기 위해 단순화 한 코드)이 있습니다. (예를 들어 가격 시리즈)
let getStockData cusip =
let D = DataProvider()
let arr = D.GetPriceSeries(cusip)
return arr
let data = Array.Parallel.map (fun x -> getStockData x) stockCusips
그래서이 방법은 (3000 많은 수) 각 주식의 내 데이터 공급 업체에 인터넷을 통해 연결함으로써, 배열의 배열을 contructs 날을 반환 배열 배열 (주식 당 1 개, 각 배열에 대한 가격 시리즈). 필자는 Array.Parallel.map 아래에서 무슨 일이 일어나는지 이해하지 못하고 있지만, 이것이 후드 아래에서 리소스가 낭비되는 시나리오인지 궁금해합니다. 실제로 비동기 I/O를 사용하면 더 빠를 수 있습니다. 그래서 이것을 테스트하기 위해 비동기를 사용하여이 함수를 만들려고했습니다. 아래 함수가 Don Syme 기사의 URL을 사용하여 패턴을 따르지만 "let!"으로 컴파일되지 않을 것이라고 생각합니다.
let getStockDataAsync cusip =
async { let D = DataProvider()
let! arr = D.GetData(cusip)
return arr
}
내가 오류는 다음과 같습니다! "하자" 이 표현은 유형 비동기 < '을 것으로 예상되었다>하지만 여기에 입력 한 OBJ
그것은, 대신 "하자"로 잘 컴파일하지만, 스레드를 차단하지 않고 명령을 실행하기 위해서는 느낌표가 필요하다는 것이 전부 였다고 생각했습니다.
위의 구문, getStockDataAsync 및 그 상위 레벨에서 잘못된 점은 누구나 비동기 I/O에 대한 추가 통찰력을 제공하고 내가 제시 한 시나리오에서 이점을 얻을 수 있는지 여부입니다. Array.Parallel.map보다 훨씬 빠르고 훨씬 빠릅니다. 정말 고마워.
주셔서 감사합니다. 그것은 매우 도움이되었습니다. – user297400