写这篇文章的出发点是看到操作系统中epoll实现原理,计划从硬件层面深挖软件层面调用epoll后是怎样监听数据的到来的。
for 循环???
使用循环监听数据的变化,是软件层面实现监听的唯一方法。
比如:
// 初始状态 a = 0
do {
if(a 等于 1)
执行相关逻辑
线程sleep 1s
} while(1)
通过上述方式可以实现对 a 变量的监听。 使用循环是一种典型的软件思维模式,这种方式被称之为轮询 (Polling) 。在软件中,程序在一个循环里反复检查某个条件是否满足。这种方式是主动的、顺序的、并且消耗资源的,因为CPU需要不停地执行检查指令。
物理电路因电压变化而自然响应
最简单的硬件逻辑,比如逻辑门和多路选择器(MUX),它们无时无刻不在“监听”(加电即监听)。但这并非循环。
可以把它想象成一个电灯开关。电灯本身不需要一个for循环来反复检查“开关是否被按下了?”。开关和电灯之间是一个物理连接。一旦你按下开关,电路就接通了,电流立即(以接近光速的速度)流过,灯就亮了。
一个AND门、OR门或MUX,其输出是其输入信号的直接物理信号(只受限于微小的传播延迟)。只要输入电平变化,输出就会随之变化。它总是在工作,总是在“监听”。