第17课:从非阻塞 IO 到异步通知,掌握 poll 与 SIGIO

发布时间:2026/7/16 1:12:08

第17课:从非阻塞 IO 到异步通知,掌握 poll 与 SIGIO 本节路线图非阻塞IO:这次不等,先→驱动里的非阻塞骨架:`.→应用层怎么写:`O_NO猫头鹰提示编译前先对齐目标架构和工具链名字,别让主机程序和板卡程序搞混。上一课我们已经把阻塞 IO 跑通了,逻辑非常直观:应用层调用read()条件不满足就先睡中断来了再被唤醒但工程里很快就会遇到新的问题:我不想让read()把线程睡住,可以吗?我想先做别的事,等设备准备好了再告诉我,可以吗?这就把我们带进了第17课的两条新路:非阻塞 IO:这次read()做不了,就立刻返回,不等。异步 IO / 信号驱动 IO:应用先登记,等驱动主动发信号来通知。如果说阻塞 IO 像“你站在门口等外卖”,那非阻塞 IO 更像“你先去干活,隔一会儿去门口看一下”,而异步 IO 则更像“外卖到了会主动给你打电话”。本节路线图(参考原理图)阶段 1:非阻塞读`read()` 拿不到数据时直接返回 `-EAGAIN`→阶段 2:用 poll 查询驱动实现 `.poll`,应用先查再读→阶段 3:注册异步通知`fasync_helper` 建立应用与驱动的信号通道→阶段 4:驱动主动报信中断里 `kill_fasync(..., SIGIO, POLL_IN)` 通知应用

相关新闻