Reading is pull-based and works like this: