2010-05-07 2 views

답변

4

언급 한 기사의 예제는 실제로 비동기 워크 플로우에서 let!처럼 보입니다. (인이도 AsyncEnumerator 의해 사용

  • (이 열거을 만들기 위해 설계 되었기 때문에, 이상한 방식) 일반적으로, C에서 # yield return 키워드 F # 연산 식 유사한 패턴을 인코딩하는 것을 가능하게 IMHO)는 CCR보다 간단하고 F # 비동기 워크 플로에 조금 더 가깝습니다.
  • 더 자세히 설명하는 an article을 작성했습니다.

CCR과 F # 비동기 워크 플로의 주요 차이점은 CCR에도 메시지 전달 동시성을위한 라이브러리가 포함되어 있다고 생각합니다. 예를 들어 this article을 참조하십시오. Port 클래스 (메시지를 포트로 보낼 수 있음) 및 Arbiter.Receive을 사용합니다. Port의 메시지를 기다릴 수있는 기본 요소입니다.

F 번호에

, 동일한 메시지 전달 통신 패턴을 구현하기위한 MailboxProcessor을 사용할 수 있지만,이 F # 비동기 워크 플로우의 내장 일부가 아닌 - MailboxProcessor가 비동기 워크 플로우를 사용하여 를 구현됩니다.

요약하면 : F # 비동기 워크 플로가 더 간단하고 개념적으로 더 명확하다고 생각합니다. 그러나 CCR 및 비동기 워크 플로 을 함께 사용하면MailboxProcessor이 거의 동일한 프로그래밍 패턴을 구현합니다.

+1

F # MailboxProcessor를 Erlang 프로세스와 비교하면 얼마나 효율적입니까? Erlang보다 많은 오버 헤드가 있더라도 값싼 에이전트/프로세스를 생성 할 때 .NET 플랫폼에서 얻는 것만 큼 좋을 것입니다. 맞습니까? –

+0

주요 차이점은 MailboxProcessor는 단일 프로세스에서 실행되도록 설계되었으므로 여러 프로세스/시스템에서 분산되지 않습니다. 나는 그것을 증명할 어떤 링크도 없지만 몇 가지 통계를 보았으며 그 결과 (이 시나리오에서)는 비슷하다고 생각합니다. F #은 각 MailboxProcessor에 대한 스레드를 생성 할 필요가 없습니다 (워크 플로우 덕택에). –

+0

petricek : ccr의 동반자 라이브러리 : dss는 컴퓨터 간 메시지 게시를 허용하여 점점 더 erlang의 기능과 닮았습니다. – Toad

관련 문제