The start-stop will only happen if you are receiving a series of large arrays. The 10MB is the maximum that will be filled in the background before user code requests for the same. In normal circumstances I would expect the read call to be made with the alternate buffer much before 10MB is filled up. The limit is a good thing to have and provides some flow control, as otherwise the sender could just flood the receiving worker with unlimited data that it is not yet ready to process.

10 deserializations of 100K arrays will result in 10 start-stops, while a single 10GB deserialization will only result in a single start-stop.

We could test nb < 10MB, i.e., the maximum size the default buffer can typically grow to, and do a copy in all such cases.