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