3 ms·
Do you consider reading from a normal array (one not backed by a memory mapped file) to also be blocking?
by icedchai 2y ago
Do you consider reading from a normal array (one not backed by a memory mapped file) to also be blocking?
- okr 2y agoHa. Exactly.
- magicalhippo 2y agoIn the languages and platforms I use, absolutely yes. Do you have some examples where a normal memory read is async?
- icedchai 2y agoYour definition of blocking is a bit different from my own. Synchronous is not always blocking. If the data is there, ready to go, there is no "blocking." If you consider all memory reads to be "blocking", then everything must be "blocking". The executable code must, after all, be read by the processor. In an extreme case, the entire executable could be paged out to disk! This interpretation is not what most people mean by "blocking."
- magicalhippo 2y agoFair point. I guess I conflate the two, because what's interesting to me, most of the time, is where does the control flow switch. I never rely on synchronous IO being non-blocking when writing regular code (ie not embedded). As such reading from cache (non-blocking) vs disk (blocking) doesn't matter that much, as such. It's synchronous and that's all I need to reason about how it behaves. If I need it to be non-blocking, ie playing audio from a file, then I need to ensure it via other means (pre-loading buffer in a background thread, etc etc). edit: And if I really need it not to block, the buffer needs to reside in the non-paged pool. Otherwise it can get swapped to disk.
- juped 2y agoyou don't yield to your cooperative-multitasking runtime during reading from it, which is obviously what everyone in this thread means, and it's not helpful to start telling them "you're using the word blocking wrong" apropos of nothing
- icedchai 2y agoWhy would it yield when reading from local memory? Are there any cooperative environments that do that? Seems like an unusual expectation.
- rbanffy 2y ago> Do you have some examples where a normal memory read is async? This hints at a way to make it work, but would need the compiler (or explicit syntax) to make it clear you want to be able to switch to another task when the page fault triggers the disk read, and return to a blocking access that resolves the read from memory after the IO part is concluded. It could look like a memory read but would include a preparation step.
- nemetroid 2y agoIf the memory has been paged to disk, I guess so?