Currently read I/O in BufferPool is synchronous. In some cases this can lead to poor resource utilisation and I/O throughput, because:
- We don't dispatch parallel reads to multiple scratch disks or high-throughput SSDs
- Issuing reads of contiguous scratch ranges at the same time improves the odds that the second read can be served without a disk seek or by the disks internal cache.
- Expose a batched Pin() interface that can pin multiple buffers at the same time
- Expose an asynchronous Pin() interface that can start the read, and allow the client to wait for it.
The first alternative is probably simplest.