IO completion ports explanation

This is probably a bit off-topic but maybe someone has a link to Casey's explanation of IO completion ports on one of Shawn McGrath streams? I found it really informative but I don't think Shawn has uploaded it to YouTube as promised and it's not available on Twitch anymore :(
Hello Marius,

I was looking for that myself a month or so ago but figured that I had delted the twitch VOD but your question prompted me to have another look. Apparently it was not lost.

Here's the audio for the io completion ports portion: sssmcgrath_cmuratori_io_completion_ports.ogg

I'll check with sssmcgrath if he wants to put up the whole video.

Regards,
Magnus
Thank you, Magnus!
I'm like 99% sure I posted that video on youtube but I can't find it =/ I'll gladly upload any missing videos.
There is one downside to IO completion ports, which is unfortunate, which is that you cannot use an IO completion port handle in a call to WaitForMultipleObjects :( I have no idea why they didn't implement this. Probably because they maybe didn't realize how good the API was? Maybe they just lucked into it? I don't know.

- Casey
How Can I subscribe to this thread??
typedefstructer
How Can I subscribe to this thread??


No way at the moment, we'll have something for you in the next couple weeks.
"Please note that while the packets are queued in FIFO order they may be dequeued in a different order."

·| What on earth does that mean?
gazto
"Please note that while the packets are queued in FIFO order they may be dequeued in a different order."

·| What on earth does that mean?


It means that not all IO operations complete in the same order as they were submitted.

Or if talking about UDP it's a property of the protocol that packets may arrive out of order (or not arrive at all).
ratchetfreak
It means that not all IO operations complete in the same order as they were submitted.
Or if talking about UDP it's a property of the protocol that packets may arrive out of order (or not arrive at all).

I don't know if that is a reasonable explanation to OP's question though. Those are things that happen before the IOCP message gets queued, so I doubt that is what that line would have been talking about. The IO completion port does not have anything queued on it until an IO operation completes, and then it gets queued. So unless that sentence was just a very poor choice of words, it can't be talking about the fact that the IO's don't complete in order, because they are not queued on the port, only their completion is. Hence the name "IO completion port" :)

OP: Where'd that line come from, BTW?

- Casey
I found it to be weird because FIFO is supposed to mean "first in, first out", yet immediately after it is written: "they may be dequeued in a different order.", it's an oxymoron.

Source:
https://msdn.microsoft.com/en-us/...ws/desktop/aa365198(v=vs.85).aspx

Edited by Carlos Gabriel Hasbun Comandari on