There are no callbacks in io_uring. You submit an operation (SQE), the kernel runs your request while you're doing other stuff, eventually you get back a completion entry (CQE) with the results of the operation.

Sounds like a callback to me

Saying it’s a callback is equivalent to claiming select is a callback. Receiving an event does not a callback make - providing the function address to invoke would make it a callback.

There is no callback. The response just shows up on the other ring buffer.

The client decides when to look at the ring buffer

It's not. The NT kernel and some others have genuine callbacks in some of their syscalls, where you pass a userspace function pointer which the kernel invokes on completion; io_uring isn't that and Linux doesn't have anything like that.

Callback execution is: wait until begin event occurs, then do this operation.

Asynchronous execution is: do this operation, then wait until finish event occurs.

They are opposites.

no it is not.