Pull to refresh
1
Send message

Если все же немного выглянуть из мира пайтона, то базовый пример асинхронности - аппаратные прерывания. Выше уровнем - разные софтверные прерывания, сигналы и коллбэки со стороны операционки. Еще выше, использование операционкиных сисколлов со стороны пользовательских программ. Вот так например я могу вызвать у себя асинхронную запись буфера:
sys$qio(EFN$C_ENF, chan, IO$_WRITEVBLK, &iosb, 0, 0, buf, buf_size);
Причем вместо 0, 0, можно указать что-то типа my_ast, magic_number и тогда по завершению записи функция my_ast получит Asynchronous System Trap со стороны системы.
И только потом уже начинается синтаксический питоновский сахар.

С потоками тоже все чуточку сложнее. Изначально все эти позикс треды часто работали на пользовательском уровне. И только сейчас, по мере забвения древних нормальных юниксов, все привыкли что шедулинг тредов выполняется где-то в ядре с расходами на переключение контекста.
Соответственно есть в позиксе функция pthread_attr_setscope предназначеная для выбора между System Contention Scope или Process Contention Scope треда. и т.д.

1 Новые компиляторы от Intel и IBM сейчас на основе LLVM. Как вы думаете почему?
3 Не догадались инженеры из всех этих Intel, Motorola, IBM, DEC, Sun, ARM, HP, MIPS... разрабатывать с опорой на производительность. Беда какая.
5 И кому он сейчас нужен?

Information

Rating
5,456-th
Registered
Activity