никто не мешает форкать и тридить процессы, и пусть 1 из воркеров крутится отпуская процессор на каждом таймауте а потом запускает другие процессы. это и есть концепция юзерспэйс программирования на железяках с 72ядрами
и есть массы способов обернуть такую обработку событий в симпатичные обьекты, похожие по сути на прерывания, посмотри erlang, go, node.
...ну или иначе - к истокам, в ядро


