Вам нужно будет объединить операции ввода-вывода в интерфейс, основанный на событиях (выбор / опрос), чтобы вы могли использовать операционную систему для ожидания, сохраняя при этом возможность планировать другие волокна. у select / poll есть аргумент timeout - для волокон, которые хотят спать, вы можете создать очередь с приоритетом, которая использует эту опцию select / poll для эмуляции спящего вызова.
Попытка обслуживать волокна, которые выполняют операции блокировки (вызов чтения / записи / сна и т. Д.). напрямую не будет работать, если вы не запланируете каждое волокно в собственном потоке - какой тип превосходит цель.
См. http://swtch.com/libtask/ для рабочей реализации.