分布式计算中的事件通知机制详解
1. 引言
在分布式计算环境中,向感兴趣的各方通知数据变化是一项常见需求。比如,股票行情程序需通知客户端股票价格的变动;计算机监控程序要告知管理员系统状态;病毒检测程序在检测到病毒时需警告用户;医疗监控程序在患者需要紧急关注时要通知医生等。
为描述方便,我们将对信息感兴趣的程序称为订阅者(subscribers),提供信息的程序称为发布者(publishers)。当发布者通知订阅者数据变化时,COM 客户端和 COM 服务器的传统角色会暂时反转,使用“发布者”和“订阅者”这两个术语能避免混淆。
订阅者了解数据变化的一种简单方式是定期轮询发布者,类似于定期刷新网页获取最新股票报价。以下代码展示了这种轮询方式:
while(true) {
bool bMarketClosed = spStockWatcher->IsMarketClosed();
if (bMarketClosed) {
break; // time for dinner.
}
currentQuote = spStockWatcher->GetQuote("MSFT");
...
}
这种轮询方式存在明显问题:
- 资源利用效率低 :若数据变化不频繁,订阅者会浪费大量 CPU 周期请求相同数据,发布者也会浪费大量时间回复相同答案。若发布者位于远程机器,还会浪费网络带宽。
- 事件发生与数据接收存在时间延迟 :轮询在数据变化发生
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



