유효한 짝수 금액 합산하기
요구사항
명세서 가져오기가 파싱된 금액 리스트를 만들었는데, 두 줄은 파싱에
실패했습니다(null). 실패를 버리고 짝수
금액만 남겨 그 합계를 출력하세요. 데이터는 아래 코드에 있으며, 두
버전 모두 예상 출력 아래에 표시된 줄을 출력해야 합니다.
예상 출력
Even total: 202
나란히 보기
RxDart
FxDart
차이가 나는 이유
파이프라인 자체는 거의 단어 하나까지 같습니다 —
whereNotNull → where → fold 대
compact → filter → sum. 다른 것은 그 주변의
모든 것입니다. RxDart 쪽은 평범한 리스트를 Stream으로
끌어올리고, 비동기로 전환하고, fold를 await해야 합니다 —
스트림은 이벤트 루프가 도는 사이사이에만 값을 내놓기 때문입니다.
모든 값이 이미 메모리에 앉아 있는데도 말이죠. FxDart 쪽은 동기
표현식으로 남습니다: 값을 끌어오고, 합산하고, 끝.
그것이 이 파트의 반복되는 주제입니다: 유한하고 이미 손에
있는 데이터에 대해, 스트림은 문제가 요구한 적 없는 전달
메커니즘을 얹습니다. RxDart의 연산자 어휘는 훌륭하지만 —
whereNotNull은 정확히 compact입니다 — 그
아래의 모델은 모든 고정 데이터 과제에 비동기 세금을 물립니다.
여기서는 답 전체가 숫자 하나이므로, 그 격식 — 리프트, async main,
await된 fold — 이 두 프로그램의 차이 전부입니다. 이 페이지의 판정을
실어 나르는 것이 바로 그 점이고, 같은 잔여물만 남는 뒤쪽 쌍들은
무승부로 정리됩니다. 판정은 파트 4에서 뒤집힙니다 — 거기서는 값이
정말 시간에 따라 도착하고, 바로 그 기계 장치가 핵심이 됩니다.
벤치마크
N = 100
시간 무승부
최대 메모리 무승부
N = 1,000,000
시간 FxDart 승
최대 메모리 FxDart 승
막대는 사이드별로 새 프로세스에서 반복 측정한 중앙값입니다(작은 N은 타이머 해상도를 위해 배치 처리). 두 사이드가 서로 5% 이내이거나 — 사람이 지각할 수 없는 차이인 0.6ms 이내이면 — 무승부로 칩니다. 상대 차이가 근소한 경우는 최대 5회까지 다시 측정합니다. 앱에서는 어느 막대가 짧든 몇 밀리초 이하의 차이는 사용자에게 보이지 않습니다. 메모리는 프로세스 최대 RSS입니다. Dart VM과 데이터셋은 양쪽이 동일하므로, 두 막대의 차이가 곧 파이프라인 자체가 붙들고 있는 양입니다.