Como o IO não bloqueado é implementado?

Em Java ou C # ou em outros idiomas, existem recursos de E / S não bloqueados, por exemplo, para sockets.

Assim, posso dar minhas funções de retorno de chamada ao IO sem bloqueio e, assim que o IO não bloqueador receber qualquer coisa, ele chamará meus retornos de chamada.

Eu estou querendo saber como eles são implementados. Se eu criar um IO sem bloqueio, por trás da cena, o Java ou o C # apenas criam threads de segundo plano para eles? ou o SO subjacente tem suporte nativo para eles?

questionAnswers(1)

yourAnswerToTheQuestion