Как работает select в unix подобных системах? Как он узнает, что на таком то файловом дескрипторе появились данные и при этом без блокировки?
Я читал, select придумали в тот момент, когда перешли к разделению времени и удаленным терминалам в Unix и надо было по одному каналу связи и читать данные от клавиатуры и получать данные от сервера, чтоб выводить информацию на экран, а так как заранее неизвестно как долго ждать данных (как от сервера, так и от оператора), то если просто сделать синхронный опрос, то ты будешь висеть и ждать данных, поэтому они (создатели Unix) придумали select, но я не уверен, что там было много потоков (хотя я не знаю, возможно, что Unix была многопоточной изначально), то что Unix умела делать time-sharing это да, но это вроде бы и в одном потоке можно делать. И вот как работает select под капотом, мне интересно. Как он понимает ,что вот на этом дескрипторе данные есть уже, а на этом еще нет, и при этом, если данных на таком то файловом дескрипторе (или сокете), еще нет, то блокировки не происходит?