¿Cómo se implementa Non-Blocking IO?

En Java o C # o en otros lenguajes, existen recursos de IO no bloqueantes, por ejemplo, para sockets.

Así que puedo asignar mis funciones de devolución de llamada al IO sin bloqueo y una vez que el IO sin bloqueo reciba algo, llamará a mis devoluciones de llamada.

Me pregunto cómo se implementan. Si creo un IO sin bloqueo, detrás de la escena, ¿Java o C # simplemente crean hilos de fondo para ellos? ¿O el SO subyacente tiene soporte nativo para ellos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta