just to expand on that a bit. you can build a push model API on top of a
pull model API fairly easily; the other way around is hard.
On a push model on top of pull, pull will overwrite if push is slow, how to
determine how much buffering is required. Any guideline.