« first day  last day (15 days later) » 

2:14 PM
@Mike а в случае высокоуровнего callback как вы сказали что не существует такого на уровне ОС. Это означает что фактически ОС возьмет функцию callback и все локальные переменные которые могут ей понадобиться плюс возможные функции которые вызывает этот callback? , запишет например в отдельное место оперативки и у себя зафиксирует что когда вернется Select по данному потоку вызвать эту функцию по этому адресу с такими то локальными переменными?
 
2:53 PM
@ПавелКозлов ОС вообще ничего не знает о коллбеках. У самой программы (библиотеки асинхронного ввода-вывода под ваш язык) есть какой то внутренний массив всех ожидающих сейчас коллбеков и соответствующих им дескрипторов ввода-вывода, и она сама скармливает все дескрипторы select и ОС просто вернет из этого селекта те дескрипторы которые готовы получать данные. И далее уже сама библиотека посмотрит у себя какие колбеки чему соответствуют и вызовет их
 
@Mike Т.е. у меня прям внутри кода самого языка по сути будет реализация что если мы вызвали callback то нужно положить куда то саму эту функцию всё её окружение переменные и прочие функции и связать это все с каким то дескриптором которые нам выдаст ОС на наш системный вызов... А в конце кода обработки у меня грубо говоря еще есть кусок кода который смотрит есть ли открытые дескриптоты и если есть то вызывает select , а если нет то заканчивает выполнение программы?
 
3:18 PM
@ПавелКозлов В принципе да. Окружение конечно далеко не всегда нужно. обычно если язык поддерживает такие вещи как замыкания, то у него и так есть развитый механизм сохранения окружения, он просто его использует и в данном случае. И конечно цикл событий смотрит не на оставшиеся дескрипторы, а на наличие задач которые в принципе надо выполнять. может у вас какие нибудь коллбеки на таймерах висят, которые без select обрабатываются. Но да, если все закончилось то цикл событий должен завершаться
 

« first day  last day (15 days later) »