我是一名C程序员。我写了一个程序,它有一个线程做两件事:
我在这个线程中使用了
epoll
。它轻松处理网络。但是,为了等待消息,我必须使用pipe
来传递消息,因为pipe
的fd可以由epoll
处理。
--
现在,我正在学习 Rust 及其异步部分。我发现异步运行时(例如 tokio):
epoll
;pipe
实现的。所以,我的问题是,这些运行时如何处理通道(通过
epoll
)以及网络 IO?或者频道在收到消息时如何唤醒epoll
?
换句话说,当没有任务可做时,运行时会阻塞在哪里?比如C程序中有
epoll
,没有任务时会阻塞在epoll_wait
处
我尝试阅读代码,但封装级别太多。很难找到简单的答案。所以我来了。