В Java, C# или некоторых других языках существуют неблокирующие средства ввода-вывода, например, для сокетов.
Таким образом, я могу передать свои функции обратного вызова неблокирующему вводу/выводу, и как только неблокирующий ввод/вывод что-либо получит, он вызовет мои обратные вызовы.
Мне интересно, как они реализованы. Если я создаю неблокирующий ввод-вывод за кулисами, Java или C# просто создают для них фоновые потоки? или базовая ОС имеет для них встроенную поддержку?