It appears that all read and write operations happens on the same serial queue, which could be quite inefficient if there is a read task (from the main thread) behind a heavy write task.
maybe a new api for specifying custom queue, and let developers build their own threading model?